2

サイトのルートに .htaccess ファイルがあります。ファイル内には、すべてのトラフィックをリダイレクトして「www.」を追加するコードがあります。URLの先頭に:

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^website.com [NC] 
RewriteRule ^(.*)$ http://www.website.com/$1 [L,R=301]

これは、サイトの 95% でうまく機能します。ただし、1 つのサブディレクトリ、website.com/playdate があり、そのフォルダー内に別の .htaccess ファイルがあります。この .htaccess ファイル内には、URL をもう少しクリーンなものにリダイレクトする次のコードがあります。

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^page/([0-9]+)/ index.php?page=$1

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([a-zA-Z0-9_-]+)/ view.php?url_slug=$1

このコードが www リダイレクトをオーバーライドしているようです。初期コードを追加しようとしましたが、

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^website.com [NC] 
RewriteRule ^(.*)$ http://www.website.com/$1 [L,R=301]

セカンダリ.htaccessの先頭に追加しますが、これは機能しません。

サブディレクトリを「www」に転送し続けるにはどうすればよいですか。このサブフォルダーのセカンダリ .htaccess ルールも維持しながら、サイトのバージョンを変更しますか?

4

2 に答える 2

2

たとえば/playdate、リクエストが行われると、最初に URL からファイルへのマッピングが行われ、apache はそのファイル マッピング (この場合はディレクトリにマッピング) に htaccess ファイルが含まれているかどうかを確認します。そうでない場合は、htaccess ファイルの親ディレクトリをチェックします。存在する場合、そのディレクトリ内の htaccess ファイルを使用するだけです。

したがって、 に対してリクエストが行われると/playdate、そのディレクトリに htaccess ファイルがあるため、apache は親ディレクトリで on を探す必要がありません。この 1 つの htaccess ファイルのみが適用され、親ディレクトリにあるファイルは無視されます。

Apache 2.2 を使用している場合は、 wwwリダイレクト ルールをコピーするだけで済みますが、ドキュメント ルートに存在しないため、調整する必要があります。これらのルールを htaccess ファイルの先頭に追加します (または少なくとも、そこに既にあるルールの上に):

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^website.com [NC] 
RewriteRule ^(.*)$ http://www.website.com/playdate/$1 [L,R=301]

Apache 2.4 を使用している場合は、playdate ディレクトリの htaccess ファイルに適用できる特定のオプションがあります。

RewriteOptions InheritBefore

これにより、親スコープ内のすべてのルールが子スコープ内のすべてのルールの前に継承されます。ルーティング ルールが適用される前にwwwリダイレクト ルールが適用されるようにする必要があるため、これは重要です。そうしないと、URI が壊れてしまいます。Apache 2.2 にも同様のオプションがありますが、それらは子スコープのルールのに配置されます。Inherit

于 2013-01-14T16:15:49.450 に答える