URLを次のようにしたい
www.website.com/home&foo=bar&hello=world
最初の get パラメータだけを変更したい
ただし、実際の「舞台裏」の URL は次のとおりです。
www.website.com/index.php?page=home&foo=bar&hello=world
私が見つけたすべてのチュートリアルは、すべてのパラメーターを変更します。
どんな助けでも大歓迎です!
URLを次のようにしたい
www.website.com/home&foo=bar&hello=world
最初の get パラメータだけを変更したい
ただし、実際の「舞台裏」の URL は次のとおりです。
www.website.com/index.php?page=home&foo=bar&hello=world
私が見つけたすべてのチュートリアルは、すべてのパラメーターを変更します。
どんな助けでも大歓迎です!
.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
$1
index.php?page=$1
&
page=home&
page=$1&
最後に、フラグ%{QUERY_STRING}
と[NC,L]
フラグはルール 1 と同じように機能します。