0

我想改变

domain.com/division1/index.php?members/maxmusterman.5

domain.com/division1/index.php?members/maxmusterman.5/#div

也就是说,如果 URL 包含index.php?members,那么我在 url 的末尾添加 /#div。我试过这个

RewriteEngine On
RewriteCond %{REQUEST_URI}  index.php?
RewriteRule (.*)  /%1/%{QUERY_STRING}&123 [L,QSA,R=301]

但它返回

domain.com/members/maxmusterman.5&123?members/maxmusterman.5

请注意,&123 附加在 URI 之后,然后再开始参数。我研究了 htaccess QSA 标志,但找不到在查询字符串末尾添加自定义字符串的方法。我怎样才能做到这一点。这里我使用 &123 进行测试,实际需要添加 /#div

4

1 回答 1

1

重定向

domain.com/division1/index.php?members/maxmusterman.5

domain.com/division1/index.php?members/maxmusterman.5/#div . 您可以使用以下内容:

RewriteEngine on
RewriteCond %{QUERY_STRING} !loop=no
RewriteRule ^division1/index\.php$ %{REQUEST_URI}?%{QUERY_STRING}&loop=no#div [L,R,NE]

我向目标 url 添加了一个额外的参数loop=no以防止infinite loop错误。你无法避免这种情况,因为你的旧 url 和新 url 是相同的,如果你删除 RewriteCond 和 Query 参数,可能会导致重定向循环。

NE(无转义)标志在您重定向到片段时很重要,否则 mod-rewrite 会将#其转换为 hex %23

解决方案#2

RewriteEngine on

RewriteCond %{THE_REQUEST} !.*loop=no [NC]
RewriteCond %{THE_REQUEST} /division1/index\.php\?(.+)\s [NC]
RewriteRule ^ /division1/index.php?%1&loop=no#div [NE,L,R]

在测试这些重定向之前清除浏览器缓存。

于 2018-02-10T09:01:35.620 回答