2012-05-15 55 views
0

我试图改写像DOC/name_of_doc-DOC对DOC/name_of_doc任何URL并把它传递到PHP国防部重写正则表达式

RewriteRule ^([0-9a-zA-Z\-\_]+)$ /doc/index.php?doc=$1 

这工作得很好

我试图处理事实上,name_of_doc,医生可以有一个点,以及像name_of.doc-doc的

,如果我去

RewriteRule ^([0-9a-zA-Z\-\_\.]+)$ /doc/index.php?doc=$1 

它有 - 和_和。 如何拥有一个或另一个?像点或破折号?如果我没有数字怎么办?

谢谢

+0

你在字符类之后错过了什么吗?就像'*'或'+'? –

回答

0

为什么你需要它?无论如何,最简单的方法是复制的规则:

RewriteRule ^([0-9a-zA-Z\.]+)$ /doc/index.php?doc=$1 
RewriteRule ^([0-9a-zA-Z\_]+)$ /doc/index.php?doc=$1 

或者一个规则,但难以阅读:

RewriteRule ^(([0-9a-zA-Z\.]+)|([0-9a-zA-Z\_]+))$ /doc/index.php?doc=$1 
+0

我正在寻找更优雅的解决方案,但谢谢 – Eric

+0

@Eric也许[见编辑]? –

1

我很惊讶,你的正则表达式在所有工作。通过它的外观,它应该只有在文件名只有一个字符长的情况下才会起作用...在]之后添加一个+以解决该问题。

这可能会修复你的其他bug,因为你做得很好。

侧面说明,使用[0-9a-zA-Z._-]所以你不必逃避任何东西(_没有特殊的意义,.失去字符类它的意义,并-没有任何意义,如果它是一个类的第一个或最后一个字符)

+0

我有+,我的错误。但^([0-9a-zA-Z ._-] +)$不能与my.saved_DOC-today一起使用 – Eric