2016-05-30 4 views
1

私はApache 2.4.7を使用しています。私はmod_rewriteを使っていくつかのURLを変更します。Apache2:疑問符を含むURLを書き換え

http://example.com/servicename/oldpage?id=abcからhttp://example.com/servicename/newpageに書き換えたいと思います。

他の同様の書き換えがうまくいきますので、私は?のURLの内側に問題があります。 私は\でエスケープしようとしました。

URLには?がないので、この作品:

RewriteRule ^/servicename/old /servicename/new

しかし、これらは動作しません:

RewriteRule ^/servicename/oldpage?id=abc /servicename/newpage

RewriteRule ^/servicename/oldpage\?id=abc /servicename/newpage

私もRewriteCondを使用して試してみましたこのような例から:.htaccess rewrite URL with a question mark "?"しかし、私はそれらを働かせることはできませんでした。

疑問符を含むURLをどのように書き換える必要がありますか?

編集:私はMatch Question Mark in mod_rewrite rule regexで与えられた解決策を試しましたが、それらを私のために働かせることはできませんでした。その質問は、書き換え時にクエリ文字列を保存しておき、書き換え時に削除したいということです。

+0

をあなたは書き換えが 'ID ='クエリ文字列の内容に依存したい、またはあなたはそれがNEWPAGEに送信された要求から削除必要がありますか? –

+0

私はそれを削除したい、その内容を気にしない。 –

+0

[Match \ _rewrite rule regex]の疑問符と一致する重複の可能性があります(http://stackoverflow.com/questions/822421/match-question-mark-in-mod-rewrite-rule-regex) –

答えて

1

RewriteRuleパターンは、ホスト名とポートの後ろ、およびクエリ文字列の前のURLの部分と照合されます。

要求されたURIにクエリ文字列が含まれていて、ターゲットURIが含まれていない場合、RewriteRuleのデフォルトの動作は、そのクエリ文字列をターゲットURIにコピーすることです。 [QSD]フラグを使用すると、クエリ文字列が破棄されます。

ので、これは動作するはずです:

RewriteRule ^/servicename/oldpage /servicename/newpage [QSD] 
関連する問題