无法搜索“。”使用htaccess

时间:2009-12-18 21:42:36

标签: .htaccess mod-rewrite

我正在建立一个网站(理想情况下)允许用户使用“www.mysite.com/Page/ThisLanham”格式的网址访问其他用户的主页,其中“ThisLanham”是用户名。用户名以字母开头,可以包含任何字母数字字符以及下划线,连字符或句点。

到目前为止,当忽略句点字符的使用时,重定向工作正常。以下代码处理该请求:

RewriteRule ^page/([a-zA-Z][0-9a-zA-Z-_]*)/?$ Page/?un=$1 [NC,L]

但是,我已经尝试了多种检查时间段的方法,但都导致了500内部服务器错误。以下是我的一些尝试:

RewriteRule ^page/([a-zA-Z][0-9a-zA-Z-\_\\.]\*)/?$ Page/?un=$1 [NC,L]
RewriteRule ^page/([0-9a-zA-Z-\_\\.]\*)/?$ Page/?un=$1 [NC,L]
RewriteRule ^page/([a-zA-Z].\*)/?$ Page/?un=$1 [NC,L]
RewriteRule ^page/(.\*)/?$ Page/?un=$1 [NC,L]

我的备份计划是不再允许用户在其用户名中包含句点,但我更愿意找到解决方案。任何想法???

2 个答案:

答案 0 :(得分:0)

这段时间不是(括号内)角色类中的元字符。然而,连字符是。 [Z-_]是从Z到_的字符范围。在ASCII中,这相当于[Z\[\\\]^_]。尝试:

RewriteRule ^/?page/([a-z][-_.0-9a-z]*)/?$ Page/?un=$1 [NC,L]

注意:由于比较不区分大小写,我没有打扰A-Z字符范围。

就重写而言,您可能希望重定向以“Page”开头的所有网址,并在其他地方处理非法用户名,例如“未知用户”页面或拥有您的脚本(而不是服务器)生成404。

RewriteRule ^/?page/([^/]+)/?$ Page/?un=$1 [NC,L]

如果您以后决定扩展有效的用户名,这种方法将使转换更容易。由于您需要在脚本中处理未知但有效的用户名,因此第二种方法不需要任何额外的工作。

答案 1 :(得分:0)

问题可能是您重定向到的目标也与此规则匹配,从而导致无限递归。

尝试排除目标的此规则(在本例中为 index.php ):

RewriteCond $1 !=index.php
RewriteRule ^page/([a-zA-Z][0-9a-zA-Z-_.]*)/?$ Page/?un=$1 [NC,L]