htaccess Redirect / RedirectMatch 包含特殊 / 编码字符的 URL

htaccess Redirect / RedirectMatch 包含特殊 / 编码字符的 URL

我目前正在为最近更改了结构的网站在文件中应用各种 301 重定向.htaccess。一切工作正常,但包含特殊字符的 URL 除外,对于这些 URL,我收到了 404 错误。

例如,以下带有注册商标符号 (®) 的指令会显示 404 页面:

RedirectMatch 301 ^/directory/link-with®-special-character(/)?$ somelink.com
RedirectMatch 301 ^/directory/link-with%c2%ae-special-character(/)?$ somelink.com

我也尝试过使用RedirectRewriteRule并用双引号将 URL 括起来,但似乎没有任何效果。

有谁知道可能发生什么事情或者处理这些类型的指令的正确方法?

任何帮助是极大的赞赏。

答案1

我可以确认,在我的 Apache 安装中,这两次 RedirectMatch 尝试也失败了,即使考虑到大写字母(我的日志将请求视为link-with%C2%AE-special-character)。

您可以考虑使用 RedirectMatch 的正则表达式功能,将商标符号位置替换为或.*(似乎适用于我的 apache 环境)..,例如

RedirectMatch 301 ^/directory/link-with..-special-character(/)?$ http://somelink.com

根据 urlencoding 的指示%C2%AE,此商标符号被解释为两个字符,因此..可以作为它的正则表达式,而 则.不行。

相关内容