2014-11-23 4 views
1

Что-то с моим .htaccess-файлом создает какой-то цикл правил, когда существует определенное условие. Вот код, о котором идет речь:.htaccess Внутренняя проблема с перенаправлением

<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$ [NC] 
RewriteRule ^(.+)/?$ /%1.php?o=$1 [L,NC,QSA] 

RewriteCond %{HTTP_HOST} ^(.*)\.example\.com$ [NC] 
RewriteRule ^$ /%1.php [L,NC,QSA] 
</IfModule> 

Обычно то, что это делает:

test.example.com -> example.com/test.php 
test.example.com/test2 -> example.com/test.php?o=test2 

То хорошо, кроме случаев, когда «тест» точки подобласти части на несуществующий файл, я получаю внутреннюю ошибку редиректа , в частности:

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: [retracted] 

Любая помощь приветствуется.

ответ

1

Да, это вызовет цикл, потому что RewriteCond %{REQUEST_FILENAME} !-f по-прежнему будет иметь значение для /test.php, если /test.php не существует.

Вы можете использовать этот код, чтобы предотвратить зацикливание:

<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

# don't redirect after one internal redirect 
RewriteCond %{ENV:REDIRECT_STATUS} .+ 
RewriteRule^- [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$ [NC] 
RewriteRule ^(.+?)/?$ /%1.php?o=$1 [L,QSA] 

RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$ [NC] 
RewriteRule ^$ /%1.php [L] 
</IfModule> 
+1

Спасибо, это сработало (я на самом деле не очень хорошо с пониманием HTAccess так жаль, если это было довольно очевидным ответ) – lemondrop

+0

Рад, что не работали и не это не было так очевидно :) – anubhava

Смежные вопросы