Apache 具有特殊字符的重定向规则
我希望使用重定向301规则(即,我希望能够避免重写规则)来重定向包含特殊字符(如é,á,…)的URL,例如 重定向301/xámpleApache 具有特殊字符的重定向规则,apache,.htaccess,internationalization,http-status-code-301,url-encoding,Apache,.htaccess,Internationalization,Http Status Code 301,Url Encoding,我希望使用重定向301规则(即,我希望能够避免重写规则)来重定向包含特殊字符(如é,á,…)的URL,例如 重定向301/xámple 然而,简单地添加这一点是行不通的。有什么建议吗 如何在Windows系统上解决此问题 在Windows上,可以使用记事本++正确输入Unicode字符。启动记事本++后,从“编码”菜单中选择“不带BOM的UTF-8编码”,然后键入Unicode字符并保存文件 为确保字符已正确保存,请下载适用于Windows的十六进制编辑器,并确保é保存为c3 89,α保存为c3
然而,简单地添加这一点是行不通的。有什么建议吗 如何在Windows系统上解决此问题 在Windows上,可以使用记事本++正确输入Unicode字符。启动记事本++后,从“编码”菜单中选择“不带BOM的UTF-8编码”,然后键入Unicode字符并保存文件 为确保字符已正确保存,请下载适用于Windows的十六进制编辑器,并确保
é
保存为c3 89
,α
保存为c3 a0
我假设您在Linux系统上的上一个响应
很可能Unicode字符未正确保存在.htaccess文件中
尝试此命令时会得到什么结果:
grep -o .x.mple .htaccess | od -t x1 -c
如果您的Unicode字符保存正确,您应该会收到此消息
0000000 c3 a9 78 c3 a0 6d 70 6c 65 0a 65 78 61 6d 70 6c
303 251 x 303 240 m p l e \n e x a m p l
0000020 65 0a
e \n
0000022
如果您安装了xxd
或hd
,您可以获得更整洁的输出来进行故障排除:
$ grep -o .x.mple .htaccess | xxd -g1
0000000: c3 a9 78 c3 a0 6d 70 6c 65 0a 65 78 61 6d 70 6c ..x..mple.exampl
0000010: 65 0a e.
在所有输出中,您可以看到é
保存为二进制数:c389
。从中可以看出,在UTF-8中编码时,é
实际上是两个字节:0xC3和0xA9
类似地,UTF-8格式的是:0xC3 0xA0。看见您也可以在输出中看到这些代码。这些代码应该可以工作,但这取决于您必须作为checklight检查的某些内容:
- 您是否启用了mod_别名?如果没有,则应运行
a2enmod mod\u alias
- 您是否有一些重定向到
页面的功能?(重定向在别名之前应用)示例
然后,您可以尝试将字符按浏览器编码,而不是将其转换为UTF-8,例如
%C3%A9
foré等。我在windows下使用Apache。我已将文件的编码更改为Unicode,但现在我收到一个内部服务器错误。您是如何将文件的编码更改为Unicode的?编码文件时选择了哪种Unicode格式?是UTF-8吗?是的,现在是UTF-8。我已经用notepad++更改了编码,现在我没有收到错误,但是重定向规则还没有触发。我可以在我的Windows XP笔记本电脑上重现这种情况,它对我来说非常有用。我建议您使用Notepad++从头开始创建.htaccess,并将编码设置为“UTF-8无BOM”。这只是为了确保您重新开始,并且没有处理过去所犯的任何错误。为了进行故障排除,请确保对于httpd.conf中相应的目录
条目,您具有允许覆盖所有
。您应该能够通过在httpd.conf中搜索“.htaccess”来找到此指令。另外,请确保您在httpd.conf中有LoadModule alias\u modules/mod\u alias.so
。您是否尝试过URL编码或以任何其他方式转义字符(例如。\x0NNN)?您是否使用正确的编码(UTF-8,ISO xxxx,…)保存了文件?我确实尝试过URL编码,即使用%E1而不是á等等。我还使用UTF-8保存了该文件,但重定向规则不会触发。按照您的建议(并从.htaccess的旧备份副本开始,以避免编码冲突),我设法使所有带有重音符号的规则正常工作,但包含字符a的规则除外。很难理解为什么像é这样的角色会工作而不是a。想法?%C3%A9
不起作用,因为Apache会在处理请求之前将其转换回é
。对%
进行双重编码怎么样?e、 g.%25C3%25A9