これが私の書き換えルールです
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
ディレクトリは存在しません。
$ _GETを使用してuriパラメーターを取得しないでください-.htaccessルールはスクリプトに提示されるURIをオーバーライドしないため、解析することでURIの「ab」部分を取得できます$_SERVER['REQUEST_URI']
。
Joomla!などのいくつかのPHPアプリケーションを見てきました。Magento-.htaccessファイルはすべてを「index.php」にリダイレクトし、それをPHPルーティングコードに任せて、URIを表示するページに変換します。
あなたの場合$_GET['uri']
は本当にcd
のため?uri=cd
です。ab
はURLの一部であり、GETクエリの一部ではありません。
これは、アクセスするアドレス( )uri=
の両方でGETクエリパラメータを定義したために発生すると思います。2番目のものによって上書きされます。RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]
http://localhost/ub/ab?uri=cd
見て:
http://localhost/ub/ab?uri=cd
(クエリ文字列は?uri=cd
)index.php
でURLを追加します(> )uri
index.php?uri=ub/ab
QSA
)クエリ文字列を追加します。index.php?uri=ub/ab&uri=cd
したがってuri=
、最終リクエストで2回配置され、2番目のリクエストで上書きされます。
GETuri
パラメータの1つを名前変更するだけです。
以前のクエリ文字列を無視/上書きするには、次のようなRewriteRuleを使用します。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?uri=$1 [L]