我有以下.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
答案 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]