2011-07-31 55 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] 

我已经运行到与规则的问题:

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

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

它不加载somepage.php相反,它是继其下的运行,去template2.php

回答

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不要处理其他规则。
  • 您还需要在匹配模式结束时添加$以使规则仅匹配此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中的最后一个命令,或者断点C中的命令。使用此标志来指示当前规则应立即应用,而不考虑其他规则。“ http://httpd.apache.org/docs/current/rewrite/flags.html#flag_l