2016-05-01 4 views
1

У меня есть веб-сервер со следующим (упрощенный) раскладке:Htaccess перенаправить сверху подкаталог

/ 
    www/ # will hold html and PHP files (web content) 
    doc/ # some documentation 
    lib/ # some libraries 

Я хотел бы использовать HTAccess к «переориентировать» каждый запрос www.mydomain.com/page до www.mydomain.com/www/page.php.

Я попытался следующие:

Options +FollowSymlinks 
RewriteEngine On 
RewriteRule ^(.*)$ www/$1.php 

Но он производит ошибку внутреннего сервера 500.

Для целей отладки, я создал WWW/test.php страницу, которая перекликается с каждым GET переменную, и я изменил мой .htaccess:

RewriteRule ^(.*)$ www/test.php?page=$1 

просто проверить, правильно ли я соответствие правильные вещи. Ожидаемое поведение при выполнении запроса на www.mydomain.com/somepage будет страница = somepage, а я получаю страница = WWW/get.php.

Почему это поведение? Как я могу выполнить то, что мне нужно?

+0

Если вы столкнулись с внутренней ошибкой сервера, всегда обращайтесь к файлу журнала. Всегда. В этом случае он намекнул бы на бесконечную рекурсию. – Sumurai8

ответ

1

Вы должны исключить путь вы переписывания в:

RewriteRule ^((?!www).*)$ www/test.php?page=$1 [NC,L] 

иначе вы получите сообщение об ошибке, потому что бесконечный цикл WWW/test.php также соответствует шаблону переписывания

(*).
+1

Дополнительная информация: Это только прекращает переписывать его. URL остается неизменным после попытки применения всех правил. Во втором случае 'www/test.php? Page = www/test.php' переписывает один и тот же URL-адрес. – Sumurai8

+1

Это сработало, теперь это имеет смысл для меня. Это был бесконечный цикл, о котором я не думал. – tarta

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