2011-09-03 10 views
6

mod_rewriteを使って基本的に変数に切り詰める追加の変数をURLに入れることができるかどうかは誰にも分かりません。mod_rewriteで既に書き換えられたURLにURL変数を追加する方法

私はURLがある場合たとえば、:

website.com/post/53/post-title/ 

を、私はにそれを回すためにはmod_rewriteを使用しています:

website.com/post.php?postid=53 

がエレガントな「前に追加の変数を配置する方法です-rewritten "URLを入力して、post.phpスクリプト用に保管してください。

website.com/post/53/post-title/?anothervar=6 

をこれまでのところ、それは単に追加の変数を投げし、このようなpost.phpスクリプトにURLを送信している私のmod_rewriteのコードのように思える:私は、次のことのようにリンクを作成した場合にどのような

IE、

website.com/post.php?postid=53 

私はそれがmod_rewriteので書き直される前に、私は私のPHPスクリプト(AKA website.com/post/53/post-title/?anothervar=6)の元のURLを取得するために$_SERVER['REQUEST_URI']を使用することができることを知って、その後、ちょうどそれが変数に追加されますし、文字列を切り刻むが、私かmod_rewriteを単独で使用したより洗練されたソリューションがあるかどうかを知りたがっています。

答えて

13

%{QUERY_STRING}を使用して、元のクエリ文字列を新しいURLに渡すこともできます。あなたが望むようにそれを使用してください。

RewriteRule /pages/(.*) /page.php?page=$1&%{QUERY_STRING} [R] 
+0

ありがとう、それを解決しました。書き換えルールの終わりには[R]とは何ですか?私は書き直しルールの行の最後にそれを持っていません。 – billmalarky

+0

ありがとう、私はそれを読むことを忘れたので、私はこのコメントを追加しています:あなたの書き換えルールの最後に[R]とは何ですか?私は書き直しルールの行の最後にそれを持っていません。 – billmalarky

+0

ここで最善の答え。ありがとう – Joshua

11

http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule

"qsappend | QSA"

使用、QSAは書き換える場合のmod_rewriteが正しく追加の引数を "マージ" にします。

RewriteRule /pages/(.+) /page.php?page=$1 [QSA] 

これは、ユーザーが行った要求に「page = $ 1」を追加します。

PS。 mod_rewriteは、ユーザーが指定した場合でも、 "ページ"をうれしく上書きするので注意してください。私が知っているそのまわりの方法はありません。

+0

[QSA]は私のために解決しました。 example.com/page?language=spanishに書き直されたスペイン語のリンク(example.com/spanish/pagina)にアクセスすると、私はスペイン語に翻訳されたページ(example.com/page)を持っています。私は追加のGET変数を/ spanish/paginaに追加しようとしていましたが、これはajax経由で送信され、HTML Webページを取得し続けました(ajaxは同じページを呼び出しますが、生成する代わりにjsonデータを送信するPHPスクリプトhtmlコンテンツ)。このようなことをしている人は、今QSAを使用することに注意する必要があります – OzzyTheGiant

関連する問題