Webサイトの最上位にあるディレクトリの内容を、1レベル下のサブディレクトリにリダイレクトしようとしています。また、2つのファイルと1つのフォルダーを除外する必要があります。
これまで試したことはありませんが、最後の1つは次のとおりです。
RewriteEngine on
#RewriteCond %{REQUEST_URI} !^exludedfile\.html$
#RewriteCond %{REQUEST_URI} !^exludedfile\.html$
#RewriteCond %{REQUEST_URI} !^/folder/exludedsubfolder/.*$
RewriteRule ^/folder(.*)$ /folder/subfolder/$1 [R=301,NC,L]
今回、私が間違っていることを教えてください。
RewriteRule ^/folder(.*)$ /folder/subfolder/$1 [R=301,NC,L]
この他の回答で述べたように ...ディレクトリごとの.htaccessファイルでは、RewriteRule
patternが一致しますURLパスからディレクトリプレフィックスを差し引いたものであるため、一致するURLパスはスラッシュで始まりません。そのため、パターンは^folder(.*)$
のようになります。
ルート.htaccess
ファイルを使用する必要がない限り、代わりにリダイレクト元のディレクトリに.htaccess
ファイルを作成します。したがって、/folder/.htaccess
ファイル(ドキュメントルートではありません)で、次のことを試してください。
RewriteEngine On
RewriteBase /folder
RewriteCond %{REQUEST_URI} !^/folder/subfolder
RewriteCond %{REQUEST_URI} !^/folder/exclude-file1\.html$
RewriteCond %{REQUEST_URI} !^/folder/exclude-file2\.html$
RewriteCond %{REQUEST_URI} !^/folder/exclude-dir
RewriteRule (.*) subfolder/$1 [R=302,L]
NC
フラグはここでは必要ありません。
最初のRewriteCond
ディレクティブは、リダイレクトループを防ぐためのものです。リダイレクト元のフォルダーのサブフォルダーにリダイレクトしているからです。
302
(一時的な)リダイレクトも使用しました。正常に動作していることが確認できたら、301
(永続)に変更します(それが意図の場合)。 301はブラウザによってキャッシュされるため、テストに問題が生じる可能性があります。