0

私はこの問題を抱えている人をたくさん見てきました.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がこれを追加したので、作品からアンダースコアをトリミングしています。理由はわかりませんが、これに関するヘルプは素晴らしいでしょう。

4

3 に答える 3

2

あなたは一言で言った:

URLにアンパサンドを表示する必要があるため、他の文字に置き換えることはできません。

簡単な答え:それをしないでください。

真剣に、URLでこのようにアンパサンドを使用しないでください。きれいに見えても。アンパサンドはURLで特別な意味を持っており、見栄えが良いためにその意味を上書きしようとするのは非常に悪い考えです。

ほとんどのWebベースのソフトウェア(Apache、PHP、およびすべてのブラウザーを含む)は、URLでのアンパサンドの意味について想定していますが、これを回避するのは非常に困難です。

特に、URLに任意のアンパサンドが含まれていると、Googleや他の検索エンジンを完全に混乱させるため、SEOランクが完全に破壊されます。

文字列にアンパサンドが必要な場合は、urlencodingを使用してURLに適したものに変換します%26。これはユーザーのURL文字列では見栄えがよくありませんが、意図したとおりに機能します。

それが受け入れられない場合は、アンパサンドの代わりに別のものを使用してください。「and」という単語、または「and」のような文字、あるいは単に置換せずに文字列から削除するだけかもしれません。

これらはすべて一般的な方法です。URLに実際のアンパサンド文字を強制的に含めることは一般的な方法ではなく、非常に正当な理由があります。

于 2013-02-14T12:08:21.477 に答える
0

urlencodeを見てください:

「&」文字を、URIを壊さず、「|」のようなapacheによって解釈されないものに置き換えることもできます。char。

于 2013-02-14T10:31:30.147 に答える
0

この修正を行ってから 2 週間経ちましたので、これで問題は解決したと思います。Bフラグを含めるために、Apacheのアップグレード以外の解決策を何週間も探したので、これが同様の問題を抱えている人に役立つことを願っています. ユーザーが Bed & Breakfast と入力すると、適切なページが表示されます。

これがPHPの修正です。

$newurl = "";
foreach($_GET as $key=>$pcs) 
{
    if($newurl=="")
        $newurl = $pcs;
    else
        $newurl .= "& ".rtrim($key,"_");
}

if($newurl!='') $url=$newurl;
于 2013-02-19T14:55:45.890 に答える