1

より良い URL を作成するために Apache の mod_rewrite を使用しようとしています。すべてを単一の index.php ページにリダイレクトし、$_SERVER['REQUEST_URI'] を解析してから、適切なページを含めます。

RewriteRule のコードは次のとおりです。

Options +FollowSymLinks
RewriteEngine on
RewriteRule \b.*\b index.php

URL 操作を処理する url クラスを作成しました。その中には、URL を取得する次の関数があります。

public function get_url(){
    $url = strtolower($_SERVER['REQUEST_URI']);
    $url = explode("/", $url);
    array_shift($url);
    print_r($url);
    return $url;
}

それは機能しますが、問題があります。explode関数は、/文字があると最後の配列インデックスをnullにします。これは私を悩ませ、正しいページを含めるときに物事をより複雑にします. 次のような安価な操作を行うことで、簡単に修正できるはずです。

$url = trim(str_replace(" ", "/", $url));
$url = explode(" ", $url);      

しかし、$url 変数 ($_SERVER['REQUEST_URI'] のコピー) を上で書いた以外の方法で変更しようとすると、次のエラーが発生します。

ページが正しくリダイレ​​クトされていません

Firefox は、サーバーがこのアドレスへのリクエストを決して完了しない方法でリダイレクトしていることを検出しました。

この問題は、Cookie の受け入れを無効にするか拒否することによって発生することがあります。

私の推測では、どういうわけか $_SERVER['REQUEST_URI'] が参照によって渡されており、文字列を操作しようとすると、Apache サーバーは一致を見つけることができず、バナナになりますが、なぜこれが起こっているのかわかりません(または、/ 区切り文字での爆発は問題ないが、/ 文字を空白に変更してからの爆発は問題ない理由) または、さらに重要なことに、それを修正する方法。

4

1 に答える 1

0

あなたが抱えている問題は、PHP とはまったく関係がありません。

そのリクエストを何度も書き換えるようにApacheに指示しただけで、投稿したFirefoxステートメントが得られます。

index.php が既にアドレス指定されている場合に書き換えを回避するには、条件を追加する必要があります。

RewriteCond %{REQUEST_URI} ^!(index\.php.*)
RewriteRule \b.*\b index.php

このように、ルールは URI が「index.php」で始まらず、したがってまだ書き換えられていない場合にのみ適用されます。

よろしく、

ステファン

于 2012-05-03T10:33:47.343 に答える