私はこの問題を抱えている人をたくさん見てきました.ApacheがエンコードされたアンパサンドとURLアンパサンドを処理するのを止める唯一の方法は、mod rewrite Bフラグ、RewriteRule ^(.*)$ index.php?path=$1 [ L、QSA、B]。
ただし、これは以前のバージョンの apache では利用できず、インストールする必要がありますが、これも一部のホスティング会社ではサポートされていません。
私たちにとってうまくいく解決策を見つけました。/search/results/Takeaway+Foods/Inverchorachan,+Argyll+&+Bute+ の URL があります。
これは明らかに & の URL を壊し、/search/results/Takeaway+Foods/Inverchorachan,+Argyll を提供し、そのようなページがないため 404 エラーを返します。
URL は $_GET['url'] 配列に保持されます。& が見つかった場合は、アンパサンドごとに配列を分割します。
次のコードは、各部分の $_GET 配列をトラバースすることにより、URL を元に戻します。
これには、私が気付いていない可能性のある隠れた問題があるかどうかを知りたい.
コード:
$newurl = "";
foreach($_GET as $key=>$pcs) {
if($newurl=="")
$newurl = $pcs;
else
$newurl .= "& ".rtrim($key,"_");
}
//echo $newurl;exit;
if($newurl!='') $url=$newurl;
Apacheがこれを追加したので、作品からアンダースコアをトリミングしています。理由はわかりませんが、これに関するヘルプは素晴らしいでしょう。