mod_rewrite в .htaccess не работает get

#apache #.htaccess #mod-rewrite

#apache #.htaccess #mod-перезаписать

Вопрос:

У меня есть файл .htaccess в каталоге, который должен перенаправлять все запросы на query.php , добавляя запрошенный файл в качестве GET var:

 RewriteEngine on
RewriteRule ^(.*?)$ query.php?page=$1
  

Должно работать нормально, верно? За исключением случаев, когда я пытаюсь перейти к anyfile.php , query.php print_r — это $_GET примерно так:

 Array ( [page] => query.php )
  

Я чувствую, что это, возможно, как-то связано с тем, что Apache переписывает уже переписанный URL-адрес или что-то в этом роде.

Короче говоря, я перенаправляюсь правильно, но каким-то образом GET var перепутан.

Кто-нибудь может мне помочь? Я работал над этим целую вечность, и я просто не могу понять это!

Ответ №1:

Не изобретайте велосипед, посмотрите, что другие используют для этой цели:

 Options -MultiViews
RewriteEngine On
# This line checks whether file exists:
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^ index.php [L]
  

Вы найдете URI страницы $_SERVER['REQUEST_URI'] . Обмен index.php для query.php и с тобой покончено.

Ответ №2:

Честно говоря, я удивлен, что вы не получаете ошибку «Слишком много перенаправлений».

Добавление RewriteCond, аналогичное следующему, должно решить проблему.

 RewriteCond %{REQUEST_URI} !^query.php