0

我正在尝试形成一个 URL 重写规则,该规则将处理诸如mysite.com/categoryName/和之类的 URL mysite.com/categoryName/productName/,并将它们路由到单独的处理程序。在我的 .htaccess 文件中,如果我使用:

RewriteRule shop/(.*^/)/$ view.php?mode=category&id=$1
RewriteRule shop/(.*)/(.*)/$ view.php?mode=product&id=$2

产品页面重写正确,但类别 URL 抛出 400。如果我使用:

RewriteRule shop/(.*[^/])/$ view.php?mode=category&id=$1
RewriteRule shop/(.*)/(.*)/$ view.php?mode=product&id=$2

反之亦然(类别页面显示,但产品页面上显示 400 个)。

我不知道这是否是我的 RegEx 的问题(很可能),某些 URL 必须由两个规则检查的事实,或者是否可能有一种方法可以使用单个规则进行两个重写。任何投入将不胜感激。提前致谢!

4

1 回答 1

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

但这也许是题外话。

于 2013-10-05T04:35:44.103 回答