我正在尝试构建一个URL重写规则,该规则将处理mysite.com/categoryName/
和mysite.com/categoryName/productName/
等网址,并将其路由到单独的处理程序。在我的.htaccess文件中,如果我使用:
RewriteRule shop/(.*^/)/$ view.php?mode=category&id=$1
RewriteRule shop/(.*)/(.*)/$ view.php?mode=product&id=$2
产品页面正确重写,但类别网址会产生400.如果我使用:
RewriteRule shop/(.*[^/])/$ view.php?mode=category&id=$1
RewriteRule shop/(.*)/(.*)/$ view.php?mode=product&id=$2
相反的情况发生(类别页面显示,但产品页面上显示400s)。
我无法判断这是否是我的RegEx(最有可能)的问题,一些URL必须由两个规则检查,或者可能有一种方法可以使用单个规则进行两次重写。任何投入将不胜感激。提前谢谢!
答案 0 :(得分:3)
使用点.
通常是非明确意图的不良信号,可能令人困惑。而且,它是贪婪的,所以这增加了混乱。相反,在第二个例子中使用类似于你的东西......
([^/]+)
这意味着“所有不在被否定的字符类[^...]
中的东西,在这种情况下只是斜线。重复无限次,需要(我建议需要+
对于URL):
RewriteRule shop/([^/]+)/$ view.php?mode=category&id=$1
RewriteRule shop/([^/]+)/([^/]+)/$ view.php?mode=product&id=$2
我还会看到在查看重写产品规则时处理类别时可能出现的问题。要100%确定,你应该像这样处理它:
RewriteRule shop/([^/]+)/$ view.php?category=$1
RewriteRule shop/([^/]+)/([^/]+)/$ view.php?category=$1&product=$2
但这可能是偏离主题的。