2011-01-12 14 views
4



私は自分のアプリケーションを設計しています。そして私は次のものを作るべきです。 mod_rewriteの助けを借りてすべてのGETパラメータ(?var = value)は/ var/valueに変換する必要があります。これどうやってするの?私はFrontControllerパターンを使用しているので、1つの.phpファイル(index.php)しか持っていません。あなたはこのmod_rewriteルールで私を助けることができますか?

私の英語を残念に思っています。前もって感謝します。PHPはすべてmod_rewriteでGETパラメータを

+4

あなたとあなたのユーザーの両方にとって恐ろしいことです。通常は、パスをコンテンツを指定するように見せても、他のパラメータだけを残しておくことをお勧めします。例えば、/content.php?id = 5の代わりに、/ content/5を指定することができます。あなたは何かのためのいくつかのオプションがある場合は、/ content/5 opt1 = something&opt2 = somethingのようなことをしたいかもしれません。 – Brad

答えて

6

私は、「親しみやすい」URLを使用するサイトでこれを行います。 .htaccessファイルで

:index.phpの上次に

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* /index.php [L] 

if ($_SERVER['REQUEST_URI']=="/home") { 
    include ("home.php"); 
} 

.htaccessのルールはを求めたファイルまたはディレクトリが見つからなかった場合はindex.phpをロードするよう指示します。次に、リクエストURIを解析して、index.phpが何をすべきかを決定します。

+0

美しい。これはまさに私が必要としていたものです。 – Qix

1

AFAIK mod_rewriteは疑問符の後にパラメータを扱いません - regexpの書き換え規則の行末は '?'の前のパスの終わりと一致します。つまり、パラメータを渡すこと、または書き換えの際にパラメータを完全に削除することにかなり制限されています。

3

の.htaccess

RewriteEngine On 

# generic: ?var=value 
# you can retrieve /something by looking at $_GET['something'] 
RewriteRule ^(.+)$ /?var=$1 

# but depending on your current links, you might 
# need to map everything out. Examples: 

# /users/1 
# to: ?p=users&userId=1 
RewriteRule ^users/([0-9]+)$ /?p=users&userId=$1 

# /articles/123/asc 
# to: ?p=articles&show=123&sort=asc 
RewriteRule ^articles/([0-9]+)/(asc|desc)$ /?p=articles&show=$1&sort=$2 

# you can add /? at the end to make a trailing slash work as well: 
# /something or /something/ 
# to: ?var=something 
RewriteRule ^(.+)/?$ /?var=$1

最初の部分が受信されるURLです。 2番目の部分は書き換えられたURLで、$_GETを使用して読み取ることができます。 ()の間のすべてが変数として認識されます。最初は$1、次は$2となります。こうすることで、書き換えられたURLのどこに変数を置くべきかを正確に判断し、それによって検索する方法を知ることができます。

(.+)を使用すると、非常に一般的なままで「すべて」を許可できます。これは、単に1つまたは複数の文字()(.)を意味します。または、より具体的に、たとえば桁数:[0-9]+(0〜9の範囲内の1つ以上の文字)のみを許可します。 http://www.regular-expressions.info/には、正規表現に関するさらに多くの情報があります。そして、これをテストするには良いサイトです:http://gskinner.com/RegExr/

5

.htaccess内の次のコードは、あなたのURLを例えば次のように書き換えます。 /api?other=parameters&added=true/?api=true&other=parameters&added=true

RewriteRule ^api/   /index.php?api=true&%{QUERY_STRING} [L] 
+0

これはまさに私が探していたものです!ありがとう! – Aaron

関連する問題