1

次のルールの.htaccessファイルがあります。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

index.phpには次のものがあります。

$route = (isset($_GET['route'])?explode('/',$_GET['route']):null);

if(!empty($route)){
    $route[0]; //movie
    //$route[1]; //movie-name

    header("Location: " . "http://192.167.1.189/site_name/movie/" . $route[1]);
    // $route[1] = 2271 (movie id)
    exit;
}

目標は、このURLから取得することです。

http://192.167.1.189/site_name/movie-page.php?id=2270

このURLに:

http://192.167.1.189/site_name/movie/2270

.../movie-page.phpから.../movie/などの他のURLの変更も必要になります...

リダイレクトループが発生する理由は理解できますが、修正方法がわかりません。すべて(cssファイルや画像などの有効なファイルとディレクトリを除く)を中央のphpファイルにリダイレクトしてから、ユーザーフレンドリーなURLにリダイレクトするにはどうすればよいですか?

4

1 に答える 1

1

リダイレクトループが発生する理由は理解できますが、修正方法がわかりません。すべて(cssファイルや画像などの有効なファイルとディレクトリを除く)を中央のphpファイルにリダイレクトしてから、ユーザーフレンドリーなURLにリダイレクトするにはどうすればよいですか?

だから、これはあなたがやろうとしていることのように聞こえます:

  1. ブラウザがわかりやすいURLを要求する
  2. .htaccessの書き換えルールは、フレンドリを?route=クエリ文字列のルールに書き換えます
  3. スクリプトはリクエストを受け取り、それindex.phpを処理して、ブラウザに必要なものを提供します

しかし、あなたもやりたいです:

  1. ?route=ブラウザがクエリ文字列を含む醜いURLを要求する
  2. URIが一致しないため、書き換えルールは何もしません
  3. スクリプトはリクエストを受け取り、それindex.phpが醜いURLであることを確認し、ブラウザをわかりやすいURLにリダイレクトします。

これを行うには、最初に要求されたURLがどのように見えるかをスクリプトでチェックインする必要があります。$_SERVER['REQUEST_URL']または$_SERVER['REQUEST_URI']変数を調べることでそれを行うことができます。ブラウザが実際に要求したもののURIを教えてくれるはずです。

たとえば、誰かがブラウザのURLアドレスバーにURL:http://192.167.1.189/site_name/movie/2270を入力した場合、書き換えルールはそれをにルーティングしindex.php、phpファイルでチェックする$_SERVER['REQUEST_URI']と次のように表示されます/site_name/movie/2270

しかし、誰かが自分のURLアドレスバーに:を入力するとhttp://192.167.1.189/site_name/movie-page.php?id=2270、は$_SERVER['REQUEST_URI']になります/site_name/movie-page.php?id=2270。したがって、ifステートメントに次のようなものが必要な場合があります。

if(!empty($route) && 
   strpos($_SERVER['REQUEST_URI'], "site_name/movie/") != 1
  ){

$routeしたがって、 varに何かがあり、 $_SERVER['REQUEST_URI']varが。で始まらないことを確認する必要があり/site_name/movie/ます。

于 2012-09-27T21:27:40.563 に答える