2012-03-19 6 views
1

は、ここで私が達成しようとしてんだよダイナミックURLをクエリで静的URLにmod_rewriteすることはできますか?</p> <p>前:</p> <blockquote> <p>= 5</p> </blockquote> <p>後PG & www.example.com/index.php?page=about:

www.example.com/about.html?pg=5

URLの最後には必ずそのクエリが必要です。私はこれらの静的メソッドを使用して避けたかった: www.example.com/page/about/pg/5/ または www.example.com/about/5/

は、ここで私がこれまで持っているものです。

RewriteEngine On 
RewriteBase/

RewriteRule ^([a-zA-Z-]+)\.html\?pg\=([0-9]+)$ index.php?page=$1&pg=$2 [L] 

私はvar_dump($ _ GET); 「ページ」パラメータのみが表示されました。

私はアドレスバーに入力したかのように結果を得たいと思っていました.www.example.com/about.html?pg=5はwww.example.com/index.php?page=aboutと同じ意味です& pg = 5。 .phpを使用する代わりに、私はそれを.htmlとして表示したかったのです。パラメータ 'pg'は私がさまざまなページのハイパーリンクとして使用するためのものです。私は 'index.php'を取り除き、それを 'about.html'としたいと思っていました。

たとえば、このページは記事に使用されます。その記事のコメントのセクションがあります。私は、パラメータ 'pg'を使ってコメントのページを制御したかったのです。

答えて

2

ご理解いただける場合はabout.html?...index.php?page=about&...に書き換えてください。その場合は、簡単な解決策があります:[QSA]フラグを使用してください。より一般的に

RewriteRule ^([0-9A-Za-z]+)\.html$ index.php?page=$1 [NS,QSA] 

、あなたは、クエリ文字列内のテキストを一致させるためにRewriteCondを使用することができます。 documentationとして言う:

「あなたは、ホスト名、ポート、またはクエリ文字列にマッチしたい場合は、それぞれ%{HTTP_HOST}%{SERVER_PORT}、または%{QUERY_STRING}変数とRewriteCondを使用しています。」例えば

[QSA]フラグなしで同じ効果を達成するための別の方法は次のようになります。

RewriteCond %{QUERY_STRING} ^pg=([0-9A-Za-z]+)$ 
RewriteRule ^([0-9A-Za-z]+)\.html$ index.php?page=$1&pg=%1 [NS] 

それとも、あなたは他の方法(私が最初にあなたの質問を読んで)移動したい場合:

RewriteCond %{QUERY_STRING} ^page=([0-9A-Za-z]+)&pg=([0-9]+)$ 
RewriteRule ^index\.php$ %1.html?pg=%2 [NS] 

(編集:コメントあたりRewriteCond秒から削除見当違い疑問符)

+0

私はちょうど最後の2つの段落を編集しました。うまくいけば、それはそれをより明確にするでしょう。 – user1105430

+0

@ user1105430: '[QSA]'ソリューションはあなたが望むことをしますか?あなたの説明に基づいて、私はそれがすべきだと思います。 –

+0

2番目の例は完全に機能しました。私はちょうど 'を取らなければならなかった?'この例の%{QUERY_STRING}にあります。 RewriteCond%{QUERY_STRING}^\ pg =([0-9A-Za-z] +)$です。ありがとうございました!!! – user1105430

関連する問題