14

この質問は重複している可能性があります。しかし、私は私のために働く解決策を見つけられませんでした。1つと2つのレベルのパラメーターがあるURLを書き直したい。最初のパラメータはpで、2番目はsp

www.domain.com/homeを指す必要がwww.domain.com/index.php?p=home あり、 www.domain.com/projects/99を指す必要がありますwww.domain.com/index.php?p=projects&sp=99

.htaccessでどのようにすればよいですか?

現在、私のhtaccessは次のとおりです。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?p=$1
RewriteRule ^([^/]*)/([^/]*)\$ index.php?p=$1&sp=$2 [L]

このhtaccessの問題は、1つのレベルのURLを正しく指していることです。つまり、www.domain.com/homeです。ただし、2レベルのURLではありません。すなわち。www.domain.com/projects/99

4

1 に答える 1

42

ルールを個別に扱う必要があります。ルールに先行するすべての条件は、単一のルールにのみ適用されます。以下のルールは、peceedingルールとその条件には影響されません。2つのルールを「連鎖」させようとしました。最初のルールは構文を変更したキャッチオールであったため、2番目のルールは一致しなかった可能性があります。それとは別に、最初のルールが不要なリクエストをキャッチしないようにする必要があります。*また、パターンでまたは+演算子を使用するかどうかも検討してください。+「ページ」または「サブページ」に空の値が要求されたときに明確なエラーメッセージが表示されるように、演算子を使用することをお勧めします。

したがって、これはあなたが探しているものに近づくかもしれません:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ index.php?p=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ index.php?p=$1&sp=$2 [L]
于 2013-02-09T09:06:45.123 に答える