重写单个或多个文件夹的规则



用于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

有可能吗?我如何修改我的重写规则来实现这一点?

您的代码有两个问题:

  1. 第一个规则中的.*太贪婪了,它与/匹配,所以第一个规则也与/compare/car/india/compare/car匹配
  2. 由于您的URI以/compare开头,并且规则正在重写为compare.php,因此您需要通过关闭MultiViews来关闭内容协商
  3. 您的最后一条规则不包含任何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]

最新更新