0

これが私の現在の.htaccessです:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f [NC,OR]
RewriteCond %{REQUEST_FILENAME} !-d [NC]

RewriteRule ^$ /launcher/index.html [L]

RewriteRule ^en/admin$ /main/index.php?lang=en&action=acp [L]
RewriteRule ^sp/admin$ /main/index.php?lang=sp&action=acp [L]

RewriteRule ^en/(.*)$ /main/$1?lang=en [L]
RewriteRule ^sp/(.*)$ /main/$1?lang=sp [L]

ランチャー画面 (正常に動作しています) と、サイトの PHP ファイル (main/index.php) があります。$_GET を使用して、どのページに関する情報を index.php に渡しますか。つまり、index.php?action=download&file=123 です。英語には /en/ を、スペイン語には /sp/ を使用する 2 つのルート レベルがあります。これらは、?lang=en または ?lang=sp として index.php に渡されます。

解決できない問題が 2 つあります。

  • 私のルールには、失敗する奇妙な矛盾があります。私がやろうとしていることを行うには、おそらくもっと良い方法があります。誰かが私に方法を教えていただければ幸いです。私は mod_rewrite の初心者です

  • ?variable=value を使用して URL の末尾にさらに何かを追加すると、?lang=en または ?lang=sp の後に発生します。これは、2 番目のクエスチョン マークによって $_GET に不具合が生じ、$_GET で渡された変数が失われることを意味します。mod_rewrite と一緒に 2 つの $_GET を追加する方法が必要ですか?

4

1 に答える 1

0

2 番目の問題を解決するために、QSA フラグの使用を検討しましたか? ドキュメントの引用:

'qsappend|QSA' (クエリ文字列の追加)

このフラグは、既存の文字列を置換するのではなく、既存の文字列に置換文字列のクエリ文字列部分を追加するように書き換えエンジンに強制します。書き換えルールを介してクエリ文字列にさらにデータを追加する場合は、これを使用します。

最初の質問に関しては、次のようにenandspを 1 つのルールに組み合わせることができます。ただし、これが改善されているかどうかは議論の余地があります。

RewriteRule ^(en|sp)/(.*)$ /main/$2?lang=$1 [L,Q]
于 2012-04-19T11:15:42.473 に答える