微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

htaccess重定向或重写URL-在不引起无限循环的情况下将一个段添加到URL

如何解决htaccess重定向或重写URL-在不引起无限循环的情况下将一个段添加到URL

我有一个URL,我需要在其中添加一个/#!/

这不起作用,因为我收到了一个循环。

Options +FollowSymLinks
RewriteEngine On
RedirectMatch "/constantsegment/(.*)" "/constantsegment/#!/$1"

例如,假设我的网址是http://example.com/constantsegment/changeablesegment。我需要将网站重定向http://example.com/constantsegment/#!/changeablesegment

请注意,#!constantsegment之间有一个称为changeablesegment的URL段(文件夹)。

我遇到的问题是,尝试将/#!/附加到/constantsegment/时创建了重定向循环。我如何才能在末尾添加/#!/,然后在其后添加所有其他段。

再次

http://example.com/constantsegment/changeablesegment

重定向

http://example.com/constantsegment/#!/changeablesegment

一个例子(在这种情况下,乘积是常数段)

http://example.com/products/cars/blue

重定向

http://example.com/products/#!/cars/blue

解决方法

RedirectMatch "/constantsegment/(.*)" "/constantsegment/#!/$1"

只需将.*更改为.+(1个或更多),以避免匹配目标URL并导致重定向循环。因为片段标识符不会在重定向的请求上传递回服务器。

您也可以通过捕获第一个“恒定”路径段来避免重复。例如:

RedirectMatch "/(constantsegment)/(.+)" "/$1/#!/$2"

请注意,上述mod_alias指令(即RedirectMatch)与mod_rewrite(即RewriteEngine On)无关。这里也不需要Options FollowSymLinks。除非您在.htaccess文件的其他位置使用mod_rewrite。

如果您已经在其他重定向中使用了mod_rewrite,则应该改用mod_rewrite(即RewriteRule)(以避免意外冲突)。例如:

Options FollowSymLinks
RewriteEngine On

RewriteRule ^(constantsegment)/(.+) /$1/#!/$1 [NE,R,L]

需要使用NE标志来防止#(哈希)经过URL编码并被视为URL路径的一部分。

请注意,所有这些重定向都是302(临时)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。