2017-01-14 7 views
1

Я работаю в данный момент на небольшом PHP-проекте..htaccess mod_rewrite показывает apache2 documentroot несколько раз в url

Для этого создается простой класс маршрутизатора, который принимает значение GET-параметра, разбивает его и вызывает запрошенный класс и метод.

Мой файл .htaccess должен переписать требуемый URL, так что я могу назвать

http://localhost/class/function

, которые должны быть перенаправлены на

http://localhost/index.php?route=class/function

Так метрономы r так хорошо. То работает со следующим .htaccess-файл:

DirectoryIndex index.php 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?route=$1 [QSA] 

Но теперь, если I'am пытается получить доступ к базовой для URL

http://localhost

Я получаю перенаправлены

http://localhost/var/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.phpvar/www/public/index.php

, который я не могу объяснить.

Если честно, я до сих пор не работал с mod_rewrite, но это поведение выглядит странным для меня.

Надеюсь, что кто-нибудь может мне помочь.

Спасибо, ребята.

Редактировать 2017-01-15

Похоже, что это не имеет ничего общего с файлом HTAccess.

Сначала я проверил свой файл с этим validator, и похоже, что он работает, как я и хотел.

Я попытался удалить файл htaccess, и у меня есть та же проблема. Поэтому я предполагаю, что это вызвано веб-сервером apache2.

Я установил LogLevel в моем виртуальном хосте для отладки и получил следующую информацию от него:

[Вс Янв 15 09: 33: 41.684274 2017] [authz_core: отладка] [PID 2183] mod_authz_core. c (809): [клиент 10.0.2.2:49743] AH01626: результат авторизации от всех предоставленных:

[вс 15 янв 09: 33: 41.684355 2017] [authz_core: debug] [pid 2183] mod_authz_core.c (809): [клиент 10.0.2.2:49743] AH01626: результат авторизации: предоставлен

[вс 15 янв. 09:33:41.684445 2017] [core: info] [pid 2183] [клиент 10.0.2.2:49743] AH00128: Файл не существует: /var/www/public/var/www/public/index.phpvar/www/public/index. phpvar/WWW/государственный/index.phpvar/WWW/государственный/index.phpvar/WWW/государственный/index.phpvar/WWW/государственный/index.phpvar/WWW/государственный/index.phpvar/WWW/государственный/index.phpvar/WWW/государственный/index.phpvar/WWW/государственный/index.phpvar/WWW/государственный/index.phpvar/WWW/государственный/index.phpvar/WWW/государственный/index.phpvar/WWW/государственный/index.phpvar/WWW/общественности/index.phpvar/WWW/государственный/index.phpvar/WWW/государственный/index.phpvar/WWW/государственный/index.phpvar/WWW/государственный/index.phpvar/WWW/открытый/index.php

Это не имеет смысла для меня. Мой конфигурационный файл для виртуального хоста не содержит правил перезаписи.

ответ

0

Проблема, вызванная тем, что она петляет каждый раз, когда вы посещаете локальный хост. Попробуйте остановить этот цикл, добавив флаг [L] как следующий код: RewriteRule ^(.*)$ /index.php?route=$1 [L,QSA]

UPDATE Я создал пример, который работает на моей стороне:

Я создал главную страницу индекса с параметром страницы. Таким образом, ссылка, такая как index.php?class=software, приведет вас к странице программного обеспечения, а ссылка на index.php?class=test приведет вас к тестовой странице. С mod_rewrite, чтобы молча перенаправлять пользователей из класса/программное обеспечение/к index.php?class=software и т.д.

Ниже то, что нужно идти в ваш файл .htaccess для достижения этой цели:

RewriteEngine on RewriteRule ^class/([^/\.]+)/?$ index.php?class=$1 [L]

Также Безразлично» t loop при посещении страницы index.php.

+0

Спасибо за ответ. К сожалению, ничего не изменилось. Все-таки такое же поведение. – pennertenner

+0

Мы обрабатываем все с помощью^(. *) $, Это может вызвать этот цикл, попытайтесь ограничить его с помощью 'RewriteOptions maxredirect = 1', также добавьте опцию' Options + FollowSymlinks' и сообщите мне, пожалуйста. – UrL

+0

Я пробовал это. Но все равно никаких изменений. Но теперь мой apache2 errorlog говорит: [Sat Jan 14 20: 13: 25.288749 2017] [rewrite: warn] [pid 3143] AH00664: RewriteOptions: опция MaxRedirects была удалена в пользу глобальной директивы LimitInternalRecursion и будет проигнорирована. – pennertenner