Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 具有特殊字符的重定向规则_Apache_.htaccess_Internationalization_Http Status Code 301_Url Encoding - Fatal编程技术网

Apache 具有特殊字符的重定向规则

Apache 具有特殊字符的重定向规则,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

我希望使用重定向301规则(即,我希望能够避免重写规则)来重定向包含特殊字符(如é,á,…)的URL,例如

重定向301/xámple


然而,简单地添加这一点是行不通的。有什么建议吗

如何在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