2011-05-17 109 views
1

我有一个很奇怪的问题,在我的.htaccess重定向。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的人都会明白为什么在这些特定情况下没有返回引用。 (我已经用其他例子对它进行了测试,并且精确地经历了同样的问题,所以我确定它在所有情况下都是匹配的,但只在返回包含连字符的情况下返回回参考文件。

谢谢这么多!

回答

0

试试下面的,我相信分组的格式不正确。

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

我也建议你的前缀作为链接此URL格式是相当宽松的。也就是说它的任何URL匹配与字母数字,下划线或短划线,如下所示更加灵活

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

谢谢杰森!不幸的是,我的客户请求了url结构 - 否则我会去/ book /子目录结构。它使事情有点棘手。我尝试了你的建议,但不幸的是它似乎完全打破了匹配。我不知道发生了什么问题了! – sarah 2011-05-17 22:17:05

+0

尝试'^([\ w \ - ] +)/ $'。 – 2011-05-18 01:01:24

+0

非常感谢,杰森!由于零匹配,在htaccess中发现另一行与此冲突。正则表达式我真的很糟糕! – sarah 2011-05-18 15:30:53