2009-07-03 20 views
4

(アパッチモッズリライト)再書き込みすることが可能にこのからURL:この再書き込みする理由はURLをする必要があるということである。このhttp://www.example.com/h5k6このようにURLを書き直すことはできますか?いいですか?

http://www.example.com/view.php?t=h5k6非常に短い(ちょっとしたURLサービスのようなもの)。

新しいURLはまだ私のview.phpページに当たったでしょうか?変数tにアクセスするためにスーパーグローバル配列GET($_GET)を使用することはできますか?私はまだ私のindex.phpページをこのhttp://www.example.comにマップしたい。

私はちょっとした騒ぎだから、これが持つ効果についてのコメントもありがとう。 :)

おかげで、すべての

答えて

12

mod-rewriteの用語は、他の方法で動作します。リクエストはhttp://www.example.com/h5k6のようになり、内部的にはhttp://www.example.com/view.php?t=h5k6に書き換えられます。こうすることで、PHPスクリプトはGETパラメータとして送信されたかのようにリクエストに応答できますが、ユーザーはURLをもっと親しみやすい方法で表示します。

したがって、PHPスクリプトを変更する必要はなく、tパラメータにGET配列からアクセスできます。あなたのケースでは

、ルールは次のようになります。

RewriteRule ^/(.*) /view.php?t=$1 

あなたは(だけではなく、キャッチオール.*表現の)受け入れるかについてより具体的にしたいかもしれません。また、このディレクトリにview.php以外の他のページがある場合は、このルールの例外が必要になることがあります。

2

は、これらのいずれかを試してみてください。

# /view.php?t=h5k6 externally to /h5k6 
RewriteCond %{THE_REQUEST} ^GET\ /view\.php 
RewriteCond %{QUERY_STRING} ^([^&]*&)*t=([^&]+)&?.*$ 
RewriteRule ^/view\.php$ /%2 [L,R=301] 

# /h5k6 internally to /view.php?t=h5k6 
RewriteRule ^/([0-9a-z]+)$ view.php?t=$1 [L] 
1

はい、これは間違いなく可能であり、あなたが記述正確に効果があります。しかし、あなたの用語は逆です。 「短い」URLは、ブラウザの原点がサーバーに送信するURLであり、長いバージョンに書き換えられ、実際に処理されてPHPリクエストが返されます。

不注意に使用すると、検索エンジンが両方のURLのインデックスを作成し、重複したコンテンツとみなしてランキングに悪影響を与える可能性があります。一方では、これを回避することができますし、避けるべきです。どこでも「長い」バージョンを公開することはできません(つまり、サイト内部リンクはすべて「短い」形式です)。しかし、誤って(簡単に起こりうる)それらを公開する可能性があるので、link rel="canonical"を使用して、ページにインデックスを付けるURLを検索エンジンに伝える必要があります。