0

私のジレンマ:

私のウェブサイトのルートにある .htaccess :

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

サブディレクトリ /foo の .htaccess 内

RewriteEngine On
RewriteRule ^page1\.html$ /foo/page2.html [R=301]

最初に、すべてのリクエストに先頭の www. 2 番目の例では、foo サブディレクトリにある page1.html に対する要求を、同じくそのサブディレクトリにある page2.html にリダイレクトしています。

私のブラウザで、訪問しようとしています:

http://www.example.com/foo/page2.html <== 動作、良好

http://www.example.com/foo/page1.html <== http://www.example.com/foo/page2.htmlにリダイレクトします。

http://example.com/foo/page1.html <== http://www.example.com/foo/page2.htmlにリダイレクトします。

http://example.com/foo/page2.html <== リダイレクトが発生しない、悪い

==> リダイレクト先: http://**www.**example.com/foo/page2.html

実験を通して、Web サイトのルートにある .htaccess ファイルのリダイレクト ルールは、そのサブディレクトリに .htaccess ファイルが含まれていない場合、またはそのサブディレクトリに .htaccess ファイルが含まれていて、それを実行する書き換えルールが指定されている場合にのみ、そのサブディレクトリ内のページへの要求に対して有効になるように思われます。この特定のリクエストに対する効果。

誰かが私が間違っていることを見ることができますか? wwwを貼り付ける書き換えルールを取得するにはどうすればよいですか。http://example.com/foo/page2.htmlの起動に失敗した場合は?


ホップありがとう、うまくいきました!

記録のために、サイトのルートにあるファイルの書き換えルールを次のように変更する必要がありました。

RewriteRule ^.*$ http://www.example.com%{REQUEST_URI} [R=301,L]

これは問題ありません。ありがとう!

4

2 に答える 2

4

に次のディレクティブがありませんfoo/.htaccess:

RewriteOptions inherit

参照。ドキュメント

于 2008-12-04T00:51:39.387 に答える
2

のルールが に/.htaccess適用されない理由についての詳細はわかりません/foo/.htaccess。通常、.htaccessファイルはディレクトリ構造のルールを継承するため、あらゆる種類の奇妙なことが発生する可能性があります。ただし、特定のソリューションでは、関連するすべてのルールを親.htaccessファイルに次のように配置できます。

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
RewriteRule ^foo/page1\.html$ /foo/page2.html [R=301]
于 2008-12-03T23:58:35.017 に答える