10

URLを次のようにしたい

www.website.com/home&foo=bar&hello=world

最初の get パラメータだけを変更したい

ただし、実際の「舞台裏」の URL は次のとおりです。

www.website.com/index.php?page=home&foo=bar&hello=world

私が見つけたすべてのチュートリアルは、すべてのパラメーターを変更します。

どんな助けでも大歓迎です!

4

1 に答える 1

47

.htaccessこれをWeb ルート/ディレクトリに追加します。

RewriteEngine on
RewriteBase /

RewriteRule ^home$ index.php?page=home&%{QUERY_STRING} [NC,L]

これをすべてのページで機能させたい場合、つまり次のよう/any-pageに提供されるようにする場合は、index.php?page=any-page次を使用します

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d # not a dir
RewriteCond %{REQUEST_FILENAME} !-f # not a file
RewriteRule ^(.*)$ index.php?page=$1&%{QUERY_STRING} [NC,L]


これらのルールはどのように機能しますか?

ARewriteRuleの構文は次のとおりです。

RewriteRule [Pattern] [Substitution] [Flags]

パターンは正規表現を使用でき、URL のホスト名とポート (.htaccessルート ディレクトリに配置されたもの) の後、クエリ文字列の前の部分と照合されます。

最初のルール

このパターン^home$は、最初のルールを着信 URL と一致させますwww.website.com/home。は、内部的に置換された URL の%{QUERY_STRING}後にあるものを単純にキャプチャして追加します。/home?index.php?page=home

フラグNCは単にルールの大文字と小文字を区別しないようにするため、一致するか、/Homeまたは/HOME同様になります。そしてL、それを最後としてマークするだけです。つまり、以下に定義されている他のルールがある場合に備えて、ここで書き換えを停止する必要があります。

第二のルール

これはより一般的なものです。つまり、すべてのサイト ページがこの URL パターンに従っている場合、ページごとに 1 つずついくつかのルールを記述する代わりに、この一般的なルールを使用できます。

.*パターン内の が一致^(.*)$し、かっこは、置換 URL で使用される変数として部分/any-page-nameをキャプチャするのに役立ちます。inとは、複数のクエリ文字列フィールドと値のペアの間で使用される単なる区切り記号です。any-page-name$1index.php?page=$1&page=home&page=$1&

最後に、フラグ%{QUERY_STRING}[NC,L]フラグはルール 1 と同じように機能します。

于 2013-08-10T14:24:49.030 に答える