0

我正在尝试将 doc/name_of_doc-doc 之类的任何 url 重写为 doc/name_of_doc 并将其传递给 php

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

这很好用

我正在尝试处理 name_of_doc-doc 可能像 name_of.doc-doc 一样有一个点的事实

如果我走

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

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

谢谢

4

2 回答 2

1

我很惊讶你的正则表达式完全有效。从外观上看,它应该只在文件名正好是一个字符长的情况下才起作用......在+之后添加一个]来解决这个问题。

这也可能修复您的其他错误,因为您做得很好。

旁注,使用[0-9a-zA-Z._-]这样您就不必转义任何内容(_没有特殊含义,.在字符类中失去其含义,并且-如果它是类的第一个或最后一个字符则没有意义)

于 2012-05-15T13:10:27.080 回答
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
于 2012-05-15T13:08:58.013 回答