2009-06-24 16 views
11

PHPアプリケーションでURL書き換えを実装しようとしています。誰かがPHPとMySQLでURL書き換えを実装する手順をステップバイステップで共有できますか?PHPでURLを書き直すにはどうすればいいですか?

私のアプリケーションでは、私は、次のURLの書き換えを実装したい、私は

1. http://example.com/videos/play.php?title=google-io-2009-wave-intro 
2. http://example.com/videos/play.php?id=203 

1. http://example.com/videos/play/google-io-2009-wave-intro 
2. http://example.com/videos/play/203/google-io-2009-wave-intro 

をリダイレクトする方法上記の方法のいずれかに書き換え、両方のURLを実装する方法を教えてください。

次の2種類のうち、SEO、管理、アプリケーションの観点からURLが一番良いものがもう1つあります。

1. http://example.com/videos/play/google-io-2009-wave-intro 
2. http://example.com/videos/play/203/google-io-2009-wave-intro 
+0

これは以前に尋ねられたと思います。これについての私の完全な解決策[ここ](http://stackoverflow.com/questions/836917/htaccess-and-seo-friendly-urls/836958#836958)を見てください。 –

+0

[こちら](http://net.tutsplus.com/tutorials/other/a-deeper-look-at-mod_rewrite-for-apache/)は、[Nettuts](http://www.nettuts)の良いチュートリアルです。 .com)をmod_rewriteに追加しました。 – Xaisoft

答えて

23

A Beginner's Guide to mod_rewrite

通常、これはmod_rewriteモジュールを有効にして(おそらくホストで有効にしている可能性があります)、Webディレクトリに.htaccessファイルを追加するだけです。一度それを済ませたら、あなたは行かなくても数行しかありません。上にリンクされたチュートリアルがあなたの世話をします。楽しみのためだけに、ここに書き換えるKohana .htaccessファイル

です:

# Turn on URL rewriting 
RewriteEngine On 

# Installation directory 
RewriteBase /rootDir/ 

# Protect application and system files from being viewed 
RewriteRule ^(application|modules|system) - [F,L] 

# Allow any files or directories that exist to be displayed directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# Rewrite all other URLs to index.php/ 
RewriteRule .* index.php/$0 [PT,L] 

これが何をするか、すべての要求を取ると、index.phpファイルを介してそれらをチャネルです。したがって、www.examplesite.com/subjects/phpにアクセスした場合、www.examplesite.com/index.php?a=subjects & b = phpにアクセスしている可能性があります。

これらのURLが魅力的であれば、さらに進んで、MVCフレームワーク(モデル、ビュー、コントローラ)をチェックすることをお勧めします。

www.mysite.com/jokes

public function jokes ($page = 1) { 
    # Show Joke Page (Defaults to page 1) 
} 

または、www.mysite:それは本質的にあなたのウェブサイトは、関数のグループのように扱うことができます。最初のスラッシュが関数を呼び出すと、続くそのすべてがその関数のパラメータを埋める方法COM// 2

public function jokes ($page = 1) { 
    # Show Page 2 of Jokes (Page 2 because of our different URL) 
} 

をジョークに注意してください。それは本当に素晴らしいですし、ウェブ開発をもっと楽しくしてください!

+0

また、.HTACCESS http://whats-online.info/science-and-tutorials/105/URL-rewriting-in-PHP-using-htaccess-example/でURLを書き換える方法もお試しください。 –

1

コメントと質問をもう一度読んだ後、以前の回答があなたの探しているものではないことに気付きました。だからここでいくつかの追加、もしあなたがリライト/リダイレクト/プロキシURLアドレスなどのようにしたい場合は、ユーザータイプwww.f1.com彼は実際にwww.f2.comを参照してください、ドメインは同じままですが、おそらくreverse proxyそのためにApacheを使用しています。これはmod_rewriteに似ています。

2番目の部分については、現代のクローラもURLリンク分析を行っているので、私はあなたの最初のオプションがパフォーマンスが優れていると思います。

前の答え:php.netから

<?php 
// Here you can parse the current location 
// and decide whenever you want to go 
// if $_SERVER[ 'PHP_SELF'] some conditions then.... 
header('Location: http://www.example.com/'); 
?> 

:あなたのようなリダイレクトを達成することができます
そして使用してPHP。 Hereより多くの例。

+0

あなたは正しく質問を理解しましたか? – Prashant

+1

あなたの質問によると、私は良いチャンスがあります。だから多分それはいくつかの説明を入れる価値がある。あなたはPHPを使ってリダイレクトする方法を尋ねました。サンプルを表示します。ハードコードされているだけですが、ヘッダーを書く前に解析してから決定することができます。 –

+0

あなたがリダイレクトのために誤解されている可能性があります。とにかく、URLの書き換えを探しています。つまり、ユーザーがhttp://example.com/video/play/203/kjhjkhkjhのようにブラウザにURLを入力すると、応答を得るには.php。これを書き換えと呼ぶ。 – Prashant

7

これはPHPだけではできません。 mod_rewriteを調べる必要があります(あなたがApacheを使用していると仮定します)。

+0

はい、私はそれを使用しています。 – Prashant

+0

@jeroenあなたはPHPでのみこれを行うことはできません。なぜなら、urlを駆動するapacheであり、Apacheがリクエストされたリソースを取得しようとするからです。なぜmod_rewriteがあなたにURLを書き換えることができるのですか?あなたはこれを作るためにPHP以外のいくつかの層が必要だと言った –

+0

...あなたはindex.php/mi-page、index.php/my-page-2のようにすることができますが、ここでの目標はそれを削除することです –

1

ご迷惑をおかけしますが、詳細な説明はしませんが、開始点としてDokuWikiをご覧ください。

  1. 正規のURL:?ID =
  2. が書き換え.htaccessのZZZ:rewrittingに
  3. 内部(PHP)の書き換えを行うにはApacheを使用しています:URLが終わるその設定で

    は、それは3つのモードを受け入れます見た目はhttp://www.example.com/kb/doku.php/start

無料ですので、コードをダウンロードして閲覧するだけです。

注記として、apacheリダイレクトは最も良い解決策である可能性が高いですが、純粋なPHPのものも興味深いです。コードがIIS6サーバーで実行され、再書き込みがApacheほど簡単でない場合です。

1

残念ながら、それは実際にPHPではなくWebサーバーに依存しています。 Apacheなどを使用しているかどうかによって、スクリプトを実行する前にこれを行う必要があります。私はmod_rewriteのを使用して、例えば、書き換えルールは次のようになります。

<Directory "/home/www/html"> 
    RewriteEngine On 
    RewriteBase/
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteRule ^(.*)$ /index.php/%{REQUEST_URI} [PT,L] 
</Directory> 

URLは、実際のファイルまたはディレクトリへの有効なパスがある場合は、上記のルールは基本的に言って、それをロードします。それ以外の場合は、index.phpを実行します。

2

サーバがサポートしている場合(apache/mod_rewrite)、.htaccessファイルを使用して訪問者をリダイレクトできます。

(ちょうどドラフト、あなた自身のニーズに適応...)のようなもの:二例えば

RewriteEngine On 
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/([0-9]+)/([-0-9a-zA-Z]+)/?$ /$1/$2.php?id=$3 [L] 

6

MODリライト使用:

RewriteRule ^videos/play/([0-9]+)/([^.]+)$ play.php?id=$1&name=$2 

example.com/play.php?id=203 &名=グーグル-IO-2009波イントロ

する

一例として機能するであろう.com/videos/play/203/google-io-2009-wave-intro

3

リダイレクトはリライトと同じではありません。

リダイレクトは、サーバーが要求を受信し、応答がリダイレクトとして送信される場合です。たとえば、www.example.com/pageというページをリクエストします。サーバーがこれを受け取ると、ページまたはサーバーがブラウザにリダイレクトコマンドを発行します。リダイレクトコマンドは基本的に「ここに行く:新しいページ」と言う。 PHPでは、これはヘッダ( 'Location:newpage.html')の形式です。

サーバがブラウザからリクエストを受信した後、サーバがそのサイトの一致する正規表現のリストを検索するときの書き換えです。一致するものが見つかると、そのフォームにURLが書き換えられ、それに応じて応答されます。例えば、要求されたURL www.example.com/specificpageは、www.example.com/?loadpage=specificpageのように(サーバー側で)書き直すことができます。ブラウザはヘッダー情報を受信しないため、別の場所に移動する必要があります。

1

フロントコントローラを使用して上記の提案と少し違ったアプローチをとることができます。これは、カスタムURLを作成する一般的なソリューションであり、PHPだけでなくすべての言語で使用されます。 http://www.oreillynet.com/pub/a/php/2004/07/08/front_controller.html

基本的には、すべてのURLに対して呼び出されるindex.phpファイルを作成します。その仕事はURLを解析し、URLの内容に基づいて実行するコードを決定することです。たとえば、ユーザーがhttp://example.com/index.php/videos/play/203/google-io-2009-wave-introなどのURLを使用し、index.phpがURL(/ videos/play/203/google-io-2009-wave-intro)から残りの要素を抽出すると、最初の部分を取り、その名前(videos.phpまたはplay.phpを使用できるようにする)を使用して、パラメータ203とgoogle-ioを渡します。あなたはそれに慣れていた場合

  1. は、あまりにも多くのmod_rewriteのコードを必要としません:それは事実のmod_rewriteのコードを書き換えると同じことをやっているが、いくつかの利点を持っているん

  2. あなたは一箇所ですべてのセキュリティコードを配置することができます - index.phpの
  3. にはURLを変更し、404エラーを処理するのは簡単だなど

をあなたが見る、のmod_rewriteを使ってURLからindex.phpを削除することができここに:http://www.wil-linssen.com/expressionengine-removing-indexphp/

関連する問題