我正在建立一个网站(理想情况下)允许用户使用“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]
我的备份计划是不再允许用户在其用户名中包含句点,但我更愿意找到解决方案。任何想法???
答案 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]