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

ここで、パラメーターを開始する前の URI の後に &123 が付加されていることに注意してください。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]

loop=noエラーを防ぐために、宛先 URL に追加のパラメーターを追加しました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 に答える