2

私はうまくいったと思った RewriteRule を持っています:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ index.php?lang=$1&page=$2
RewriteRule ^(.*)/editor/(.*)$ index.php?lang=$1&page=editor&func=$2

$_GET['lang']最初のレベル (lang と page のみ) でa を実行すると、言語が返されます。しかし、第 2 レベル (lang、page、func) で試してみると、index.php.

私は何を間違っていますか?ありがとう!

4

1 に答える 1

1

最初の一致後に処理を停止する [L]フラグがなく、2 番目のルールも最初のルールと一致します。より具体的であるため、最初にリストし、[L]. さらに、貪欲ではなく、次のすべてを一致させること(.*)をお勧めします。([^/]+)/

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# List this first, with [L]
RewriteRule ^([^/]+)/editor/(.*)$ index.php?lang=$1&page=editor&func=$2 [L]
# Then URIs not containing editor/ will match the other rule
RewriteRule ^([^/]+)/(.*)$ index.php?lang=$1&page=$2 [L]

CSS と画像が失敗している場合はRewriteCond、ルールの下に移動しeditor/て、条件が最も限定的でキャッチオールな一致にのみ適用されるようにする必要があります。

RewriteRule ^([^/]+)/editor/(.*)$ index.php?lang=$1&page=editor&func=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/(.*)$ index.php?lang=$1&page=$2 [L]
于 2013-06-18T20:27:35.757 に答える