2012-04-10 7 views
4

私の.htaccessファイルで複数のmod_rewriteルールを同時に処理することができません。 enitreサイト全体で私は "www"をドロップしたいすべてのURLからにdomain.com/help/1.htaccess内の複数のmod_rewriteルール

  1. 変更:

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

    その後、1つのフォルダに「/ヘルプ」私は2回の書き換えをしたい:私は使用していますドキュメントルートで次のように

domain.com/index.php?category=exampleに domain.com/help/category/example domain.com/index.php?question=1
  • 変更
    www.domain.com
    domain.com/help/ domain.com
    へ:上記の2つの.htaccessファイルがために働く

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

    :だからdomain.com/helpに私は、次の持っています domain.com/index.php?question=1
    domain.com/help/category/example にdomain.com/index.php?category=example

    から1 しかし、これは動作しません。私はcomにする必要があるとき2つの書き換えを行い、両方を "www"にします。サブフォルダをurl変数に書き換えることができます。例:
    www.domain.com/help/1 domain.com/index.php?question=1
    は500エラーを返します。私は間違って行くのです

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

  • +0

    Apacheのエラーログには何が表示されますか? – mensi

    答えて

    2

    /helpフォルダ内の.htaccessファイルのルールが適用されているようです。親フォルダのルールが適用されないように、そのフォルダ内に何かをリクエストしているためです。あなたは/ヘルプフォルダの.htaccessにRewriteOptions 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を作成しようとした場合は、希望しないものになる可能性があります。

    あなたの最善の策は、あなたが、ルールが適用される順序を制御することができるように、あなたのドキュメントルートに一つに/ヘルプフォルダ内のものを移動することがあります

    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に書き換えられます。

    関連する問題