htaccess RewriteRule - 模式不匹配

时间:2016-12-03 17:33:53

标签: .htaccess mod-rewrite

我正试图在我的网址中以干净的方式使用类别:

website.com/category

在网址中,类别的编写如下:一些随机的例子:

动物
消费电子
书籍 - &放大器; -Comics
外部硬盘
形式,-Beauty-和放大器; - 健康
黑色 - &安培; - 白电视
该-冒险-OF-丁丁
油炸锅,-Waffle-makers-和放大器; -Cooking
等...

正如您所看到的,有一个随机组合的单词(以大写字母开头),字符“ - ”,“,”和“&”。组合比组合更多。

通过重写,我试图在这样的变量中获取类别:

RewriteRule ^([\w-&]+)$ /categories.php?mcn=$1 [L,NC]

这不起作用。如果我在categories.php中用“Books-& -Comics”读出我想要的变量,我只会得到“Books-”,而它应该是“Books-& -Comics”。

当我在字符类中添加“,”时,如下所示:

RewriteRule ^([\w,-&]+)$ /categories.php?mcn=$1 [L,NC]

我收到内部服务器错误。

我的RewriteRule应该如何匹配类别示例并在变量中正确获取它们?

1 个答案:

答案 0 :(得分:0)

对于您的第一个问题,问题是您的参数正在被解码,因此&正在启动一个新的URL参数。您可以通过在规则中添加B标记来解决此问题。

您的第二个问题是模式^([\w,-&]+)$无效。它试图匹配任何单词字符或,&之间的任何字符。 (Ascii 44& 38)因为这是乱序,正则表达式失败了。由于您希望匹配-字符而不是将其用作范围指示符,因此应对其进行转义。

通过这些更改,您的规则是:

RewriteRule ^([\w,\-&]+)$ /categories.php?mcn=$1 [L,NC,B]

regex101这样的正则表达式助手可以帮助您创建规则。