Htaccess相同的规则,2个文件无法正常工作

时间:2015-09-23 21:12:42

标签: .htaccess

我正在尝试使用htaccess文件创建友好的分页。

但它不起作用我猜我正在使用错误的文件规则。

查看下面的代码。

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{THE_REQUEST} \s/+search\.php\?q=([^\s&]+) [NC]
RewriteRule ^ /search/%1/? [R=301,L]

RewriteRule ^search/$ search/%1 [L,R=301,NC]
RewriteRule ^search/(.*)/$ search.php?q=$1 [L,NC]

RewriteRule ^new/(.*)$ new.php?page=$1 [L,NC]
RewriteRule ^(.*)/$ cat.php?id=$1 [NC]

RewriteRule ^(.*)/(.*)/$ cat2.php?id=$1&page=$2 [NC,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ post.php?id=$1 [NC]

一切正常,只有cat2.php无效。 如何解决?

1 个答案:

答案 0 :(得分:2)

您需要在两个猫规则之间切换顺序。 (.*)匹配所有内容,包括斜杠,因此它将始终匹配任何cat2匹配。尝试交换他们的订单并包含L标志:

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{THE_REQUEST} \s/+search\.php\?q=([^\s&]+) [NC]
RewriteRule ^ /search/%1/? [R=301,L]

RewriteRule ^search/$ search/%1 [L,R=301,NC]
RewriteRule ^search/(.*)/$ search.php?q=$1 [L,NC]

RewriteRule ^new/(.*)$ new.php?page=$1 [L,NC]
RewriteRule ^(.*)/(.*)/$ cat2.php?id=$1&page=$2 [L,NC,QSA]
RewriteRule ^(.*)/$ cat.php?id=$1 [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ post.php?id=$1 [NC]