如果您的规则有效,它将依赖字符编码(在.htaccess文件中使用的编码和用于请求的URI的编码)。如果两者都相同,它应该可以工作。
现在大多数用户代理使用ISO 8859-1或UTF-8编码通过HTTP请求的URL。但UTF-8早晚会取代ISO 8859-1。
而当bobince注意到注释时,Apache在解释.htaccess文件时在内部使用单字节编码ASCII。所以当你使用像UTF-8这样的多字节编码时,你可能会遇到问题。不过是编码independed如下:
# for ISO 8859-1
RewriteRule ^([a-zA-Z0-9\xC4\xD6\xDC\xDF\xE4\xE9\xF6\xFC-]*)/?$ page.php?var=$1 [L]
# for UTF-8
RewriteRule ^(([a-zA-Z0-9-]|\xC3\x84|\xC3\x96|\xC3\x9C|\xC3\x9F|\xC3\xA4|\xC3\xA9|\xC3\xB6|\xC3\xBC)*)/?$ page.php?var=$1 [L]
但是为了避免这样的结构,你可以只排除斜线和斑点,后来与PHP验证的值:
RewriteRule ^([^/.]*)/?$ page.php?var=$1 [L]
那么为什么它只能在服务器发生。 .. 我的本地机器正在工作.... :( – coderex 2009-08-22 10:37:47
也许你正在使用不同的编码,无论是文件还是URI。 – Gumbo 2009-08-22 10:46:15
+1,Apache处理字节,所以原来的规则只适用于ISO-8859-1提交,这是很少见的,因为今天的URL是事实上的UTF-8。最好避免这一层的问题,允许任何老字符通过;在PHP脚本中做任何你需要的字符检查,把这种逻辑放在Web服务器层中作为重写是没有意义的。 – bobince 2009-08-22 11:52:04