.htaccess 使用htaccess搜索“.”时遇到问题

.htaccess 使用htaccess搜索“.”时遇到问题,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我正在建立一个理想的网站,允许用户访问其他用户的主页,网址格式为www.mysite.com/Page/ThisLanham,其中“ThisLanham”是用户名。用户名以字母开头,可以由任何字母数字字符以及下划线、连字符或句点组成 到目前为止,当我忽略句点字符的使用时,重定向工作得非常好。以下代码处理该请求: RewriteRule ^page/([a-zA-Z][0-9a-zA-Z-_]*)/?$ Page/?un=$1 [NC,L] 然而,我也尝试了很多方法来检查这段时间,但都导致了50

我正在建立一个理想的网站,允许用户访问其他用户的主页,网址格式为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]

我的备份计划是不再允许用户在用户名中包含句点,但我更愿意找到一个解决方案。有什么想法吗?

句点不是括号内字符类中的元字符。然而,连字符是。[Z-uu]是从Z到u的字符范围。在ASCII中,这相当于[Z\[\\\]^\]。尝试:

注意:由于比较是不区分大小写的,所以我不需要考虑A-Z字符范围

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

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

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

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

尝试此规则,在本例中排除目标index.php:


请注意,您可以通过将文本缩进至少四个空格将其格式化为代码,并保留额外的空格。文本编辑器工具栏中的101\n010按钮将为您缩进。它比斜体文本可读性好得多。顺便说一句,您应该查看serverfault.com了解类似的问题。
RewriteRule ^/?page/([^/]+)/?$ Page/?un=$1 [NC,L]
RewriteCond $1 !=index.php
RewriteRule ^page/([a-zA-Z][0-9a-zA-Z-_.]*)/?$ Page/?un=$1 [NC,L]