0

ドメインのルートにあるメイン.htaccessファイルには、次のコードがあります。

RewriteEngine on
# If missing 'www'
RewriteCond %{http_host} ^example.com [nc]
# Redirect to 'www' version
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,nc]
# Remove 'index.php' from URL 
RewriteRule ^index.php$ http://www.example.com/ [R=301,nc]

次に、各ディレクトリに個別のファイルを作成し、次のディレクトリに示すように、URLからを.htaccess削除します。index.php/products

RewriteEngine on
RewriteRule ^index.php$ http://www.example.com/products/ [r=301,nc]

(キャッシュをクリアした後)訪問すると、期待どおりexample.comにリダイレクトさwww.example.com/れます。

しかしexample.com/products、アドレスバーに入力すると、ページはとして読み込まれexample.com/products/、バージョンにリダイレクトされません。www.example.com/products/私は何が間違っているのですか?助けてください...そして私は必要に応じてより良い説明/例を提供することができます。

4

1 に答える 1

1

サブディレクトリ内の htaccess で書き換えエンジンをオンにすると、次を使用しない限り、親ディレクトリ内の htaccess ファイルにある可能性があるすべての書き換えルールが除外されます。

RewriteOptions inherit

サブディレクトリの htaccess ファイルにディレクティブを追加します。にある唯一のルールに/productsは に対するリダイレクトしかindex.phpないため、リクエストが に対するものでない限り、/products/index.php親ディレクトリのルールは無視されるため、ルールは適用されません。

また、Apache 2.2 では、このオプションにより、サブディレクトリにある規則の後inheritに親の書き換え規則が配置されることに注意してください。


編集:

ベースが同じでないため、継承されたルールは機能しません。www ルールへのリダイレクトを他の場所にも追加する必要があります。/products/したがって、これらをディレクトリの htaccess ファイルに追加します。

RewriteCond %{http_host} ^example.com [nc]
RewriteRule ^(.*)$ http://www.example.com/products/$1 [R=301,nc]

RewriteOptions inheritまたは、ドキュメント ルートの htaccess ルールを次のように変更して保持することもできます。

RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,nc]

に:

RewriteRule ^(.*)$ http://www.example.com%{REQUEST_URI} [R=301,nc]
于 2012-10-01T19:22:15.517 に答える