質問

URLを複数のサブストリングで書き換えたいと思っています。 1つのサブストリングはサブディレクトリとして要求され、他のサブストリングは通常のクエリ文字列パラメーターとして要求されます。

たとえば、URLを書き換えたい

http://www.mysite.com/mark/friends?page=2

to

http://www.mysite.com/friends.php?user=mark&page=2

疑問符を除いてこれを達成できます。ここに私の書き換えルールがあります:

...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends[?]?([^/\.]+)?$ friends.php?user=$1&$2 [L]

疑問符を他の文字に変更すると、うまく機能します。問題は「?」文字が新しいクエリ文字列の開始として誤って解釈されています。

/ user / friendsの後に表示されるパラメーターをそのまま渡す必要があります。どうすればこれを達成できますか?

役に立ちましたか?

解決

クエリ文字列を書き換えるのではなく、 [QSA] フラグを使用する必要があります。 [QSA] は、クエリ文字列を書き換えられたURLに渡します。

したがって、ルールは次のようになります。

...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends/? friends.php?user=$1 [QSA,L]

あなたのケースは、 mod_rewriteクックブックでQSAフラグを使用する例と非常に似ています。

他のヒント

書き換えフラグQSAの使用に加えて、以下に示すようにQUERY_STRING環境変数を使用することもできます。

RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends$ /friends.php?user=$1&%{QUERY_STRING}

そして問題のURL

http://www.example.com/mark/friends?page=2

に書き換えられます(指定どおり):

http://www.example.com/friends.php?user=mark&page=2
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top