私はWP Webサイトの静的コピーを作成するためにSimply Staticプラグインを使用しました。すべてのファイルは/2016/
にあり、静的コピーは/2016/a/
にあります。 WPを.htaccess
からexample.com/2016
にリダイレクトさせるには、example.com/2016/a
に何を追加すればよいですか。
これが私の現在の.htaccess
です。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /2016/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /2016/index.php [L]
</IfModule>
# END WordPress
外部リダイレクトを/2016/<anything>
から/2016/a/<anything>
にしたい場合は、次のようにできますbefore既存のWordPressディレクティブ(つまり# BEGIN WordPress
の前) /2016/.htaccess
ファイルで:
RewriteCond %{REQUEST_URI} ^/(\d{4})/(.*)
RewriteRule !^a/ /%1/a/%2 [R,L]
否定されたRewriteRule
パターンは、URl-pathがすでにa/
(/2016/
ディレクトリに対して)で始まる場合にリダイレクトが発生しないようにします。 %1
および%2
後方参照は、一致したCondPatternを参照します。
これは外部リダイレクトであるため、/a
サブディレクトリは自然にユーザーに公開されることに注意してください。 (内部で/a
サブディレクトリにリンクしている場合は、とにかく公開されます。)
あるいは、内部的に書き換える/2016/<anything>
から/2016/a/<anything>
へのすべてのリクエストを行い、/a
サブディレクトリを非表示にする場合(ユーザーは/2016/<anything>
のみを表示します)、代わりに次のようなことができます:
RewriteCond %(ENV:REDIRECT_STATUS) ^$
RewriteRule (.*) a/$1 [L]
環境変数REDIRECT_STATUS
をチェックするRewriteCond
ディレクティブは、書き換えループを防ぐために、書き換えられたリクエストではなく、初期リクエストにのみ適用されるようにします。
このrewriteは、/a
が最初の要求に既に存在するかどうかに関係なくURLを書き換えることに注意してください。例えば。 /2016/a/<something>
のリクエストは、内部的に書き換えられますから/2016/a/a/<something>
になります(おそらく404になります)。しかし、目的が/a
サブディレクトリを非表示にすることである場合、そもそも/a
はリクエストに存在しないはずです。
繰り返しますが、このmustは既存のWordPressディレクティブの前に移動します。 WordPressサイトは、これらのディレクティブが削除されるまでアクセスできなくなります。
/2016/a/<something>
の形式のURLが既にインデックス化されているか、外部のサードパーティによってリンクされている場合は、URLから/a
サブディレクトリを削除するリダイレクトを含めることも検討してください(SEOを保持するため)。たとえば、次のようにする必要がありますbefore上記の書き換え:
RewriteCond %(ENV:REDIRECT_STATUS) ^$
RewriteCond %{REQUEST_URI} ^/(\d{4})
RewriteRule ^a/(.*) /%1/$1 [R,L]
%1
後方参照は、ディレクトリ名ieを参照します。 "2016"(上記のCondPatternでキャプチャ)-これはsubstitutionのディレクトリ名を手動でハードコード化する必要を省くだけです。$1
はURLの/2016/a/
に続くすべての後方参照-パス。
上記の「リダイレクト」(R
のRewriteRule
フラグで示される)は一時的な(302)リダイレクトであることに注意してください。これらがpermanentであることが意図されている場合、R
をR=301
に変更します。 301はブラウザによってハードキャッシュされるため、テストが問題になる可能性があります。