Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: mod_rewrite: как убрать редирект, оставив в адресной строке набранный адрес?
 
 автор: Scorpion15   (06.04.2011 в 08:57)   письмо автору
 
 

Всем привет!
Вообщем вот мой конфиг касаемо модуля, и вроде как все работает:

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{THE_REQUEST} ^GET\ .*/index\.(php|html?)\ HTTP
    RewriteRule ^(.*)index\.(php|html?)$ $1 [R=301,L]
    RewriteRule ^.*-d([0-9]+)/?$ index.php?DepartmentId=$1 [L,R]
    </IfModule>



Только почемуто если я вызываю
http://localhost/abc/abc-d2/
сервер перенаправляет мена на
http://localhost/abc/index.php?DepartmentId=1
НО он эту строку и в URL строке браузера выводит, а мне та надо что бы он вывел:
http://localhost/abc/abc-d2/
Пробую убрать R из RewriteRule
RewriteRule ^.*-d([0-9]+)/?$ index.php?DepartmentId=$1 [L]
Воводит в браузере ошибку 400 bad request.
В чем проблема?

  Ответить  
 
 автор: cheops   (06.04.2011 в 10:02)   письмо автору
 
   для: Scorpion15   (06.04.2011 в 08:57)
 

А вот эта строка зачем (скорее всего в ней дело)?
RewriteRule ^(.*)index\.(php|html?)$ $1 [R=301,L]

  Ответить  
 
 автор: Scorpion15   (06.04.2011 в 11:32)   письмо автору
 
   для: cheops   (06.04.2011 в 10:02)
 

Эта строка перебрасывает например на localhost если мы ввели localhost/index.php или localhost/index.html, если её убираю все равно не работает.

  Ответить  
 
 автор: cheops   (06.04.2011 в 11:40)   письмо автору
 
   для: Scorpion15   (06.04.2011 в 11:32)
 

Правильно ли я понимаю, что вы редактируете непосредственно httpd.conf? Если да, то перегружаете ли вы Apache после внесения правок.

PS Протестировал ваши условия в .htaccess, если убрать R у меня все работает корректно (без перебрасывания)
RewriteEngine on 
RewriteCond %{THE_REQUEST} ^GET\ .*/index\.(php|html?)\ HTTP 
RewriteRule ^(.*)index\.(php|html?)$ $1 [R=301,L] 
RewriteRule ^.*-d([0-9]+)/?$ index.php?DepartmentId=$1 [L]

  Ответить  
 
 автор: Scorpion15   (06.04.2011 в 14:01)   письмо автору
 
   для: cheops   (06.04.2011 в 11:40)
 

Да Вы правильно понимаете, я именно в httpd.conf правлю. Apache конечно же перегружаю. Единственное что, я использую все это в виртуальном хосте <VirtualHost>, но я думаю это не должно повлиять!

  Ответить  
 
 автор: cheops   (06.04.2011 в 14:11)   письмо автору
 
   для: Scorpion15   (06.04.2011 в 14:01)
 

А почему такая потребность создания правил именно на уровне виртуального хоста? А не скажем в .htaccess?

  Ответить  
 
 автор: Scorpion15   (06.04.2011 в 14:19)   письмо автору
 
   для: cheops   (06.04.2011 в 14:11)
 

Да вообщето потребности не никакой, кроме того чтобы все заработало, просто мне интересно сделать это именно так, или это невозможно, это что обязательно делать в .htaccess?

  Ответить  
 
 автор: cheops   (06.04.2011 в 14:22)   письмо автору
 
   для: Scorpion15   (06.04.2011 в 14:19)
 

Вообще правила должны работать и на уровне виртуального хоста (даже побыстрее, чем в .htaccess), но с mod_rewrite всегда множество заморочек, начиная с того, что они могут зацикливаться, заканчивая тем, что правила регулярных выражений меняются от версии к версии. Вот вы еще одну обнаружили, причем эта фича может быть только в той версии Apache, которую используете вы, поставите другую версию - правила будут вести себя по другому...

  Ответить  
 
 автор: Scorpion15   (06.04.2011 в 14:43)   письмо автору
 
   для: cheops   (06.04.2011 в 14:22)
 

Да уж, получается не очень удобная штука, хотя очень нужная и классная, а альтернативы mod_rewrite нет?

  Ответить  
 
 автор: cheops   (06.04.2011 в 14:46)   письмо автору
 
   для: Scorpion15   (06.04.2011 в 14:43)
 

Если не писать модуль для Apache самому, то альтернативы больше нет...

  Ответить  
 
 автор: Scorpion15   (06.04.2011 в 14:48)   письмо автору
 
   для: cheops   (06.04.2011 в 14:46)
 

Да уж.. Ну ладно, чего нибудь придумаю. Спасибо за помощь!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования