使用htaccess在url开头排除特定单词的正则表达式模式

时间:2016-04-02 19:11:21

标签: regex .htaccess mod-rewrite

[编辑代码] *

这是我正在使用的当前代码

Options +FollowSymLinks
RewriteCond %{REQUEST_URI} (bus/(.*))
RewriteRule bus/(.*) page1.php?param=$1 [L,NC,QSA]
RewriteCond %{REQUEST_URI} (car/(.*)) 
RewriteRule car/(.*) test/page2.php?param=$1 [L,NC,QSA]
RewriteCond %{REQUEST_URI} (bike/(.*))
RewriteRule bike/(.*) test/page3.php?param=$1 [L,NC,QSA]
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+)/(.+)$ new.php?param1=$1&param2=$2 [L,QSA]

如果上述条件失败,我试图在最后一行获得外卡条件。但服务器返回404.它没有赶上条件。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

您需要在规则末尾使用L标志来停止多个规则处理:

RewriteRule ^ask/(.*) forum.php?param=$1 [L,NC]
RewriteRule ^city/(.*) city.php?param=$1 [L,NC]

答案 1 :(得分:0)

保持所有特定规则是最后的第3和第3个通用的全面规则:

RewriteEngine On

RewriteRule ^bus/(.+)$ page1.php?param=$1 [L,NC,QSA]

RewriteRule ^car/(.+)$ test/page2.php?param=$1 [L,NC,QSA]

RewriteRule ^bike/(.+)$ test/page3.php?param=$1 [L,NC,QSA]

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+)/(.+)$ new.php?param1=$1&param2=$2 [L,QSA]

在最后一条规则之前需要两个RewriteCond以防止重写实际文件和目录。