У меня проблема с одним из моих .htaccess rewriterule:
Детали сервера:
Сервер работает на LiteSpeed Webserver, а не на Apache, по словам моего хост-провайдера, он на 100% совместим с apache mod_rewrite.
Проблема:
Я получаю 500 Внутренняя ошибка сервера, когда я использую этот код:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.mysite\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).mysite.com$ [NC]
RewriteRule ^(.*)$ %2/$1 [L,QSA,NC]
</IfModule>
Когда я использую этот код, он в значительной степени делает то, что должен, он перенаправляет трафик из любого субдомена в соответствующую подпапку с запросом файла. Нет ошибок, нет ничего, все работает нормально, но также изменяет адрес браузера, который мне не нужен.
<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.mysite\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).mysite.com$ [NC]
RewriteRule ^(.*)$ http://mysite.com/%2/$1 [L,QSA,NC]
</IfModule>
Есть идеи?
Editetd: Одна вещь, которую я хотел бы упомянуть, это то, что я использую подстановочный DNS, субдомен на самом деле не существует.
Еще раз отредактировано: RewriteRule ^ (. *) $% 2 / index.php [L, QSA, NC], если я использую это правило и пытаюсь получить доступ к http://sub.mysite.com/whatever, оно успешно перенаправляет его на http://mysite.com/sub/index.php Я не понимаю, почему он не работает с $ 1 вместо index.php, когда я меняю их, я получаю внутреннюю ошибку 500.
Получил решение сейчас:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond %{HTTP_HOST} ^(.*)mysite\.com$ [NC]
RewriteCond %{HTTP_HOST} !^www\.* [NC]
RewriteRule ^(.*)$ http://www.%1mysite.com/$1 [R=301,L,QSA] [NC]
RewriteCond %{HTTP_HOST} !^www\.mysite\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).mysite.com$ [NC]
RewriteCond %2==$1 !^(.*)==\1
RewriteRule ^(.*) %2/$1$2$3 [L,QSA,NC]
</IfModule>