Ваши правила на самом деле очень близки к тому, что вы хотите от них.Единственная проблема, которую я вижу, в ваших тестовых шаблонах для ваших двух RewriteRule
утверждений.В настоящее время у вас есть
RewriteRule ^(.*)/?(.*)/?(.*)/?$ ...
..., что эквивалентно этому:
RewriteRule ^(.*)$
Это потому, что все, что прошло после первой группы захвата, может ничего не совпадать и все еще считатьсясовпадают, так что первая группа является жадной и сопоставляет всю входную строку без необходимости отсылки к другим частям шаблона.
Поскольку группы захвата в любом случае не должны захватывать косые черты, так как они используютсяв качестве разделителя переменных здесь просто исправить их на [^/]*
следующим образом:
Edit : я также изменил набор RewriteCond
во второй группе, чтобы игнорировать!-f
условие в случае /index.php
, которое произойдет, если вы запросите субдомен без чего-либо после домена.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^(www\.)?domain.com$ [NC]
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?$ index.php?var1=$1&var2=$2&var3=$3 [NC,QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_URI} ^/index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !^(www|mail).domain.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+).domain.com$ [NC]
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?$ user.php?id=%2&var1=$1&var2=$2&var3=$3 [NC,QSA,L]