1

これが私の書き換えルールです

RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]

このURLに行くと

http://localhost/ub/ab?uri=cd

$_GET['uri']cd代わりに、を返しますab

$_GET['uri']返品を受け取る方法はab?それとも、これはQSAの実際の動作ですか?

ありがとう、

編集

.htaccessファイルはディレクトリubにあり、abディレクトリは存在しません。

4

3 に答える 3

2

$ _GETを使用してuriパラメーターを取得しないでください-.htaccessルールはスクリプトに提示されるURIをオーバーライドしないため、解析することでURIの「ab」部分を取得できます$_SERVER['REQUEST_URI']

Joomla!などのいくつかのPHPアプリケーションを見てきました。Magento-.htaccessファイルはすべてを「index.php」にリダイレクトし、それをPHPルーティングコードに任せて、URIを表示するページに変換します。

于 2012-05-25T10:00:16.083 に答える
0

あなたの場合$_GET['uri']は本当にcdのため?uri=cdです。abはURLの一部であり、GETクエリの一部ではありません。

これは、アクセスするアドレス( )uri=の両方でGETクエリパラメータを定義したために発生すると思います。2番目のものによって上書きされます。RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]http://localhost/ub/ab?uri=cd

見て:

  1. アクセスしますhttp://localhost/ub/ab?uri=cd(クエリ文字列は?uri=cd
  2. mod_rewriteはそれをに送信し、 GETパラメータindex.phpでURLを追加します(> )uriindex.php?uri=ub/ab
  3. 次に、mod_rewrite(によるQSA)クエリ文字列を追加します。index.php?uri=ub/ab&uri=cd

したがってuri=、最終リクエストで2回配置され、2番目のリクエストで上書きされます。

GETuriパラメータの1つを名前変更するだけです。

于 2012-05-25T10:00:34.393 に答える
0

以前のクエリ文字列を無視/上書きするには、次のようなRewriteRuleを使用します。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?uri=$1 [L]
于 2012-05-25T10:06:26.237 に答える