Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Некорретно работет роутер на htaccess


Автор: Jasmine 4.2.2011, 14:46
Доброго времени суток 
У меня возникла непонятная ситуация с htaccess

присуствует условие типа
RewriteRule ^(.*)/(.*)/(.*)\.html$ /index.php?page=$1&data_index=$2&data_id=$3 [L]

в php передаются переменные, например URL site.ru/qq/ww/ee.html
=>
page = qq
data_index = ww
data_id = ee

в принципе все отлично работает, но иногда в переменной page передается странное значение "redirect: index.php" вместо соответствующего значения
например site.ru/announce/ww/ee.html
=>
page = redirect:index.php
data_index = ww
data_id = ee

примечательно что на сервере существует файл announce.php
если параметр изменить, например site.ru/announcessss/ww/ee.html
то все отрабатывает корректно 

Возможно проблемы в настройке apache, потому что на другом компьютере (у меня нет конфигов с того компа) все работает корректно. 

сожержание htaccess - 

Options +FollowSymlinks
RewriteEngine on
RewriteBase /

ErrorDocument 404 /404.html
RewriteRule ^(.*)/(.*)/(.*)\.html$ /index.php?page=$1&data_index=$2&data_id=$3 [L] 
...... 

Собственно вопрос - как получить корректную переменную? 
Заранее благодарю за помощь


Автор: skyboy 4.2.2011, 14:55
поищи по коду РНР файлов "header("
можно убедиться, посмотрев rewrite.log, но мне вот уже сейчас думается, что замена происходит корректно, а потом уже PHP скрипт какой-нибудь делает редирект на некорректно сформированный адрес.

Автор: Jasmine 4.2.2011, 14:58
Я тоже так решила поначалу, но я вывожу переменные в первой строке index.php, еще никто ничего никуда не успел отредиректить .

Автор: Jasmine 5.2.2011, 21:18
Неужели никто не сталкивался? 

Автор: vasac 6.2.2011, 17:28
Перенаправьте запрос просто на index.php без всяких GET-параметров. Возьмите в нём URL из $_SERVER['REQUEST_URI'], поделите на компоненты и спокойно разберитесь с ними внутри сценария, не вынося себе мозг выкрутасами мод-рерайта.

Автор: Jasmine 7.2.2011, 01:12
Попробовала, та же история
если в адресной строке набрать просто буквы - $_SERVER['REQUEST_URI'] - отображается, если $page - реальное значение - echo вообще ничего не выводит

Взяла классический вариант - 

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [L,QSA]

Автор: vasac 7.2.2011, 10:32
Цитата(Jasmine @  7.2.2011,  01:12 Найти цитируемый пост)
если в адресной строке набрать просто буквы - $_SERVER['REQUEST_URI'] - отображается, если $page - реальное значение - echo вообще ничего не выводит

Извините, не совсем понял.

Я использовал примерно такое, попробуйте, может быть получится:
Код

RewriteEngine on

# Список папок к которым следует пропускать запросы напрямую

RewriteCond %{REQUEST_URI} ^/(i|css|js)/.*

RewriteRule . - [L]

# Аналогичный список файлов

RewriteCond %{REQUEST_URI} ^/(robots.txt|favicon.ico|sitemap.xml)$

RewriteRule . - [L]

# Остальное считается запросом страницы и перехватывается

RewriteRule (.*) index.php [L]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)