2

php でサイトをダーティ URL からクリーン URL に自動リダイレクトするにはどうすればよいですか。

http://www.mysite.com?page=page1&action=action1

http://www.mysite.com/page1/action1
4

3 に答える 3

5

クリーンリクエストかどうかを確認する必要があります。そうしないと無限ループに陥ります

これは私のプロジェクトの1つのです:

.htaccess

RewriteEngine On
RewriteRule ^game/([0-9]+)/ /game.php?newid=$1

game.php

if (isset($_GET['id'])) {
  $row = dbgetrow("SELECT * FROM games WHERE id = %s",$_GET['id']);
  if ($row) {
    Header( "HTTP/1.1 301 Moved Permanently" ); 
    Header( "Location: /game/".$row['id']."/".seo_title($row['name'])); 
  } else {
    Header( "HTTP/1.1 404 Not found" ); 
  }
  exit;
}

if (isset($_GET['newid'])) $_GET['id'] = $_GET['newid'];

したがって、それが直接の「ダーティ」コールなのか、書き換えられたコールなのかを確認する必要があります。
そして、前者の場合にのみリダイレクトします。
きれいな URL を作成するためのコードも必要です。

また、URL が間違っている場合に備えて、リダイレクトの代わりに 404 を表示することも非常に重要です。

于 2011-04-08T13:12:45.427 に答える
3

Apacheを実行している場合は、mod_rewriteモジュールを使用して、httpdocsフォルダーまたはWebルートの.htaccessファイルにルールを設定できます。下位レベルのコンポーネントの方がはるかに優れている場合に、PHPプロセスを呼び出してリダイレクトを実行する理由はわかりません。

サイモン・カルレッティの例

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/page\.php$
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^(.*)$ http://mydomain.site/page/%1.pdf [R=302,L]
于 2011-04-08T13:08:29.700 に答える
2

試す

header("Location: http://www.mysite.com/".$_GET['page']."/".$_GET['action']);

リダイレクトを試みる前に、値が設定されているかどうかを確認する必要があります

于 2011-04-08T13:07:15.130 に答える