2017-11-28 15 views
1

私はmod_rewrite URL変換を行いたいと思います。mod_rewriteとkeep query string

RewriteRule 
    ^events\?userid=([0-9]+)&start=([0-9]+)&total=([0-9]+)$ 
    ?operation=events&user=$1&start=$2&total=$3 
    [L] 

それが動作していないようです:私はある

.htaccessで私が現在使用しています何

http://localhost/?operation=events&user=XXX&start=YYY&total=ZZZ

http://localhost/events?user=XXX&start=YYY&total=ZZZ

を指示します。

私はまた、簡単なバージョン試してみました:

RewriteRule ^events\?([a-zA-Z0-9&=]+)$ ?operation=events&$1 [L] 

をしかし、それはまた、機能していません。 ORそれ以外の場合は、クエリ文字列全体を指定されたパスの末尾に転送することはできますか?

答えて

2

問合せパラメータを1つずつ「転送」するか、問合せ文字列全体を有向パスの末尾に「転送」できますか。

これはQSAフラグを使用して行われます。 QSA(Query String Append)フラグは、新しいクエリーパラメータを追加する際に既存のクエリーパラメータを保持します。

RewriteRuleディレクティブを使用してクエリ文字列を一致させることはできません。リクエストURIはRewriteRuleを使用してのみ一致させることができます。すべての元のクエリを追加すると、書き換えられたURIにパラメータによりhttp://localhost/?operation=userevents

RewriteEngine On 

RewriteRule ^/?events/?$ ?operation=userevents [L,NC,QSA] 

この意志ルートhttp://localhost/events URI:

あなたはこのルールを使用することができます。例えば、http://localhost/userevents?user=XXX&start=YYY&total=ZZZhttp://localhost/?operation=events&user=XXX&start=YYY&total=ZZZ

+1

に書き換えられますが、同じ '/ events'と'?operation = events'を使って単純化しましたが、実際には操作名は呼び出すルートとは異なります( '/ events'は'?operation = userevents')。提案されたソリューションを更新してください。 – Jago

+0

私は自分の答えを更新しました。 – anubhava