用于URL重写的htaccess代码:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^compare/(.*)/?$ compare.php?page=$1 [L,QSA]
RewriteRule ^compare/(.*)/(.*)?$ compare.php?page=$1&location=$2 [L,QSA]
此规则适用于:
www.example.com/compare/car
但它不适用于:
www.example.com/compare/car/india
我想修改适用于这些url的重写规则:
www.example.com/compare/car
www.example.com/compare/car/india
有可能吗?我如何修改我的重写规则来实现这一点?
您的代码有两个问题:
- 第一个规则中的
.*
太贪婪了,它与/
匹配,所以第一个规则也与/compare/car/india
和/compare/car
匹配 - 由于您的URI以
/compare
开头,并且规则正在重写为compare.php
,因此您需要通过关闭MultiViews
来关闭内容协商 - 您的最后一条规则不包含任何
RewriteCond
,因为它只适用于下一个直接的RewriteRule
指令
您可以在您的站点根目录中使用此代码。htaccess:
Options -MultiViews
RewriteEngine On
RewriteBase /
# skip all files and directories from rewrite
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# one path element after compare
RewriteRule ^compare/([^/]+)/?$ compare.php?page=$1 [L,QSA,NC]
# two path elements after compare
RewriteRule ^compare/([^/]+)/([^/]+)/?$ compare.php?page=$1&location=$2 [L,QSA,NC]