htaccess back-reference不返回某些匹配的值

时间:2011-05-17 20:38:55

标签: regex .htaccess redirect

我的.htaccess中有重定向的问题非常奇怪。

我设定的规则是:

RewriteRule ^([a-zA-Z0-9\-]*)/$ ?mode=book&permalink=$1

它匹配多个单词短语:
http://www.fernwoodpublishing.ca/About-Canada-Youth-and-Children/

和单词短语:
http://www.fernwoodpublishing.ca/Kaandossiwin/

但是,如果它与那些单字短语匹配,没有任何连字符,则反向引用不会正确传递。所以,上面的例子应该去

?mode=book&permalink=Kaandossiwin

哪个会正常工作,而是转到

?mode=book&permalink=

这只是创造了一大堆错误并打破了一些东西。

我尝试过各种方法来解决这个问题,似乎没有任何帮助。任何对htaccess更有经验的人都知道为什么在这些特定情况下不返回反向引用? (我已经用其他示例对它进行了测试,并且精确地遇到了同样的问题,因此我确信它在所有情况下都匹配,但在匹配包含连字符的情况下仅返回后引用。

非常感谢!

1 个答案:

答案 0 :(得分:0)

尝试以下方法。我认为分组是不正确的。

RewriteRule ^([\w-]+)/$ ?mode=book&permalink=$1

我还建议为你的链接添加前缀,因为这种URL格式非常宽松。也就是说它匹配顶级字母数字,下划线或短划线的任何URL。像下面这样的东西更灵活。

RewriteRule ^book/([\w-]+)/?$ book.php?permalink=$1