如何解决htaccess重定向或重写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 举报,一经查实,本站将立刻删除。