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$1index.php?page=$1&page=home&page=$1&
最後に、フラグ%{QUERY_STRING}と[NC,L]フラグはルール 1 と同じように機能します。