.htaccess不遵守规则

时间:2011-07-31 09:45:46

标签: .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]

我遇到了规则问题:

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

当我去http://www.mysite.com/awesomeslash/

它没有加载somepage.php而是跟随它下面的运行并转到template2.php

3 个答案:

答案 0 :(得分:3)

我认为将L添加到[NC,PT]应该解决它。

“[L]标志导致mod_rewrite停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理其他规则。这对应于Perl中的最后一个命令,或者break命令在C.使用此标志表示应立即应用当前规则而不考虑进一步的规则。“ http://httpd.apache.org/docs/current/rewrite/flags.html#flag_l

答案 1 :(得分:3)

首先:如果您想要将/awesomeslash/重写为/somepage.php,这没有多大意义:

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]

我认为你想要这个:

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]

<强>其次:

  • L旁边需要[NC,PT]标记:[NC,PT,L] - 这将告诉Apache不要处理其他规则。
  • 您还需要在匹配结束模式中添加$,以使规则仅匹配此网址,而不是/awesomeslash/something-else

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

答案 2 :(得分:1)

您必须在匹配条件结束时放置$并添加L标记,如下所示:

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