4

.htaccessファイルでいくつかのmod_rewriteルールを連携させるのに問題があります。全体のサイト全体で「www」を削除したいと思います。すべてのURLから。ドキュメントルートで次のものを使用しています。

Options +FollowSymLinks
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301]

次に、1つのフォルダ「/help」で2回の書き換えを行います。

  1. domain.com/help/1をdomain.com/index.php?question=1に変更します
  2. domain.com/help/category/exampleをdomain.com/index.php?category=exampleに変更します

したがって、domain.com / helpには、次のものがあります。

Options +FollowSymLinks
RewriteRule ^([0-9]+)/?$ index.php?question=$1 [NC,L]
RewriteRule ^category/([^/\.]+)/?$ index.php?category=$1 [NC,L]

上記の2つの.htaccessファイルは次の場合に機能します
www.domain.comからdomain.comdomain.com/help/1 から
domain.com/index.php?question=1domain.com/help/category/example to domain.com /index.php?category=example

しかし、2つの書き換えを組み合わせて両方とも「www」を削除する必要がある場合、これは機能しません。サブフォルダをurl変数に書き換えます。例:
www.domain.com/help/1からdomain.com/index.php?question=1
にすると、500エラーが発生します。

どこで私は間違えましたか?そして、これは2つの.htaccessファイルで行うのが最善ですか、それとも2つのファイルをドキュメントルートで1つの.htaccessファイルに結合できますか?

4

1 に答える 1

2

/ helpフォルダー内の.htaccessファイル内のルールが適用されているようです。これは、そのフォルダー内で何かを要求しているため、親フォルダーのルールが適用されないためです。/ helpフォルダーの.htaccessRewriteOptions Inheritにを追加すると、親ルールを渡すことができます。

Options +FollowSymLinks
RewriteOptions Inherit
RewriteRule ^([0-9]+)/?$ index.php?question=$1 [NC,L]
RewriteRule ^category/([^/\.]+)/?$ index.php?category=$1 [NC,L]

ただし、継承されたルールは、期待した順序で適用されない場合があります。たとえば、http://www.domain.com/help/1/をリクエストすると、 http://domain.com/index.php ?question = 1にリダイレクトされることになりますが、これは希望どおりではない可能性がありますクエリ文字列を非表示にしてSEOに適したURLを作成しようとしている場合。

最善の策は、/ helpフォルダー内のものをドキュメントルート内のものに移動して、ルールが適用される順序を制御できるようにすることです。

Options +FollowSymLinks

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301]

RewriteRule ^help/([0-9]+)/?$ /index.php?question=$1 [NC,L]
RewriteRule ^help/category/([^/\.]+)/?$ /index.php?category=$1 [NC,L]

これにより、www以外のドメインへのリダイレクトが最初に発生し、次に/helpルールが適用されます。したがって、http://www.domain.com/help/1/にアクセスすると、最初にhttp://domain.com/help/1/にリダイレクトされ、次にヘルプルールが適用され、URIがに書き換えられ/index.php?question=1ます。

于 2012-04-11T04:33:04.193 に答える