Набор правил 4 будет перекрываться с набором правил 1 и 2. Я подозреваю, что это вызывает проблему.Поэтому я думаю, что все 3 нуждаются в дополнительной проверке RewriteCond
на REQUEST_URI
.
На самом деле вам не нужен набор правил 4. Просто включение index.php в качестве значения по умолчанию должно помочь.Если, конечно, вам не нужны URL-адреса, подобные http://www.domain.com/?var=xyz
, в этом случае вам нужно правило 4, но вам нужно разделить его на 2 - один с QUERY_STRING
и один без, как правило 1 и 2
.
Кроме того, не является ли %1
из регулярного выражения в самом rewriteRule, а не в предыдущем rewriteConds?Если это так, то ваше регулярное выражение неверно, потому что оно будет устанавливать var=
для всего исходного URL.
Просмотр журнала ошибок - хорошая идея, поскольку она даст вам причину ошибки 500.
Редактировать: Хорошо, попробуйте что-то вроде этого (не проверено)
## Redirecting all non-www domains to www.domain.com
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L,QSA]
## Redirecting / requests to index.php
# Note: Use the QSA flag for handling with or without query string
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/index.php?var=%1 [L,QSA]
## Redirecting /something requests to index.php
# Note: Use the QSA flag for handling with or without query string
RewriteCond %{REQUEST_URI} ^/.+$
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com%{REQUEST_URI}?var=%1 [L,QSA]