3

.htaccess RewriteEngine を使用すると奇妙な問題が発生します。

私はこの簡単なルールを持っています:

RewriteEngine On
RewriteRule ^(.\*)/(.\*).php$ pages/test.php?lang1=$1&page1=$2 [L]

pages/test.php に、次の php コードを入れます。

echo('lang: '.$_GET['lang1'].'< br />');    
echo('page: '.$_GET['page1'].'< br />');    
echo('querystring: '.$_SERVER['QUERY_STRING']);

したがって、http://test.local/en-US/something.phpを呼び出すと、次のようになります。

lang: en-US    
page: something    
querystring: lang1=en-US&page1=something

代わりに、これは私がページから得た奇妙な出力です:

lang: pages    
page: test    
querystring: lang1=pages&page1=test

誰かが私を助けることができますか?

4

2 に答える 2

2

ループを作成したため、その結果が得られます。次の行を使用してみてください。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/pages/test\.php$
RewriteRule ^(.*)/(.*)\.php$ /pages/test.php?lang1=$1&page1=$2 [L]
于 2012-08-27T15:20:25.617 に答える
1

QSAフラグを使用することもできます。

RewriteRule ^(.*)/(.*).php$ pages/test.php?lang1=$1&page1=$2 [QSA,L]

置換URIにクエリ文字列が含まれている場合、RewriteRuleのデフォルトの動作では、既存のクエリ文字列を破棄し、新しく生成されたものに置き換えます。[QSA]フラグを使用すると、クエリ文字列が結合されます。

http://httpd.apache.org/docs/current/rewrite/flags.html

于 2012-08-27T15:26:33.467 に答える