2016-12-03 57 views
0

我试图使用类别在干净的方式在我的网址是这样的:htaccess的重写规则 - 模式不匹配

website.com/category

在类别是这样写的网址:一些随机的例子:

动物
消费电子
书 - & -Comics
外部 - 硬盘
形式-B eauty- & - 健康
黑色 - & - 白电视
的冒险,-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应该如何与类别示例匹配并在变量中正确地获取它们?

回答

0

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

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

有了这些变化使你的规则是:

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

regex101一个正则表达式助手可以在创建规则,一个巨大的帮助。

+0

Ik看起来像B旗也是重要的一个。它逃避了Backreferences的权利? – Thoaren

+0

@Thoaren,是的。这是正确的--B标志是让你通过转义引用来在你的URL中使用特殊字符。 – Gerrit0