1

我有几个这样的网址:

http://site.com/knowndir/../somedir/page.html

我需要将它们重定向到

http://site.com/somedir/page.html

基本上,我需要knowndir/../从 URL 中删除粒子。我知道那knowndir部分。

到目前为止,我已经尝试过这条规则:

RewriteRule knowndir\/\.\.\/(.*)$ http://site.com/$1 [R=301,L]但没有任何运气。

我究竟做错了什么?

4

1 回答 1

1

看来,客户端已经删除了...路径元素。当您access.log使用 firefox 或 wget 请求页面与使用 telnet 和GET /knowndir/../somedir/page.html HTTP/1.0.

尽管如此,当 Apache 收到带有路径元素的请求时...Apache 已经自行处理了这一点,而不需要任何重定向规则。这意味着它通过删除.or来解析这些段subdir/..,以获得明确的路径。

因此,最终您的 RewriteRule 永远不会看到knowndir/../,因此不会发送301重定向。

更新

我终于找到了相关的RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax,它在5.2.4 中描述。删除点段如何.以及..应该如何处理。

OT:永远不要在301启用的情况下进行测试,有关详细信息,请参阅此答案调试 .htaccess 重写规则的提示。

于 2013-02-15T16:56:03.043 回答