2011-07-31 5 views
2

次の.htaccessファイルがあります。.htaccessに従わないルール

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\.mysite\.com$ 
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule ^awesomeslash/ /somepage.php [NC,PT]  
RewriteRule ^([^/\.]*)/?([^/\.]*)/?([^/\.]*)/?$ /template2.php?slash1=$1&slash2=$2&slash3=$3 [L] 

私はルールに問題に実行してきました:私はhttp://www.mysite.com/awesomeslash/

に行くとき、それはそれの下でランの次に代えsomepage.phpをロードしていない

RewriteRule ^awesomeslash/ /somepage.php [NC,PT] 

とtemplate2.phpに行く

答えて

3

:第二に

RewriteRule ^awesomeslash/ /somepage.php [NC,PT]  

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule ^([^/\.]*)/?([^/\.]*)/?([^/\.]*)/?$ /template2.php?slash1=$1&slash2=$2&slash3=$3 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule ^awesomeslash/ /somepage.php [NC,PT]  

RewriteRule ^([^/\.]*)/?([^/\.]*)/?([^/\.]*)/?$ /template2.php?slash1=$1&slash2=$2&slash3=$3 [L] 

私はあなたの代わりにこれを望んでいたと仮定します。これは、あなたが/somepage.php/awesomeslash/を書き換えたい場合は、あまり意味がありません。

  • [NC,PT][NC,PT,L]の横にLフラグが必要です。これは、Apacheに他のルールを処理させないように指示します。
  • また、一致するパターンの最後に$を追加すると、ルールはこのURLと一致するようになり、/awesomeslash/something-elseでは一致しなくなります。説明と例えば

    RewriteRule ^awesomeslash/$ /somepage.php [NC,PT,L]

+0

感謝。これはうまくいった。 –

1

あなたは一致条件の最後に$を入れて、Lのようなフラグを付け加える必要があります。

RewriteRule ^awesomeslash/$ /somepage.php [L,NC,PT] 
3

[NC、PT]にLを追加すると修正する必要があります。

"[L]フラグはmod_rewriteにルールセットの処理を停止させます。ほとんどのコンテキストでは、ルールが一致すると、それ以上のルールは処理されません。これはPerlの最後のコマンドこのフラグを使用して、現在のルールをさらにルールを考慮せずにすぐに適用する必要があることを示します。 まずhttp://httpd.apache.org/docs/current/rewrite/flags.html#flag_l

関連する問題