Эта тема на forum.dklab.ru


Юрий: Трабл с mod_rewrite
Подскажите, плз, как решить такую проблему:
хочу изменить сделать структуру сайта, оптимизировав ее для поисковиков, изменив вызовы PHP-скрипта с
http://site.ru/doc.php?id=xxx на http://site.ru/doc/xxx

Для этого прописываю в .htaccess строки

RewriteEngine on
RewriteRule ^(.*)doc/(.*)$ doc.php?id=$1

Скрипт вызывается, но параметры ему не передаются (переменной id значение не присваевается),
хотя конструкция site.ru/doc.php?id=xxx работает нормально :(
Что я делаю не так?
Александр Лукьянов:
А что по Вашему должно быть в $1? ;)
Юрий Насретдинов:
Юрий:
Дело в том, что при rewrite данные GET не обрабатываются автоматически (в отличие от POST). Поэтому исследуйте переменную $_SERVER['REDIRECT_URI'];, при необходимости почитайте мануал по функции rawurldecode...
Александр Лукьянов:
Почти аналогичный вопрос: http://xpoint.ru/forums/thread/23348.xhtml
Дмитрий Эсс:
Почти аналогичный вопрос
Кстати там ответ тоже есть.
Юрий:
Почти аналогичный вопрос
Кстати там ответ тоже есть.

Тот ответ не помогает :(
Дмитрий Эсс:
У меня такой код работал:
RewriteRule ^(.*)page1/(.*)/$ $1page1.html?l=$2
Anonymous:
У меня такой код работал:
RewriteRule ^(.*)page1/(.*)/$ $1page1.html?l=$2

А в файле page1.html какой скрипт - SSI или PHP?
И где это работало - на сервере или под Денвером?

У меня не работает под Денвером.
Дмитрий Эсс:
Скрипт там на пхп. Работало под Денвером.
Попробуйте поиграть со своим RewriteRule, сравните с моим. ИМХО вы там что-то напутали. По идее должно работать. Можите посмотреть примеры тут http://httpd.apache.org/docs/misc/rewriteguide.html . Там их куча, я свой RewriteRule писал по ним.
Юрий:
Скрипт там на пхп. Работало под Денвером.
Попробуйте поиграть со своим RewriteRule, сравните с моим. ИМХО вы там что-то напутали. По идее должно работать. Можите посмотреть примеры тут http://httpd.apache.org/docs/misc/rewriteguide.html . Там их куча, я свой RewriteRule писал по ним.

Спасибо, Дмитрий, я попробую.
С RewriteRule только начал разбираться, очень непривычный синтаксис :(
О результатах сообщу.
Юрий:
Попробовал, не помогло :(

У меня Денвер под NT4 (Apache 1.3.27 + PHP 4.3.0)

Содержимое .access
RewriteEngine on
RewriteRule ^(.*)doc/(.*)/$ $1doc.php?id=$2
Это правило я прописывал и в httpd.conf, результат тот же

Содержимое doc.php
<?php echo $id; ?>

Сообщение PHP
Notice: Undefined variable: id in z:\home\localhost\www\doc.php on line 3

Т.е. получается, что параметры не передаются скрипту. Ничего не понимаю...
Может, я что-то не вижу или не понимаю или дело в настройках Денвера?
Буду рад любой критике.
WingedFox:
Вообще-то... гм... данные из GET хранятся в $_GET.
Т.е.

echo $_GET['id'];


Старайтесь писать скрипты, которые минимально зависят от настроек хостинга.
А register_globals отключается все чаще и чаще.
Александр Лукьянов:
Что-то уж и мне странно стало... Что вот такой код не работает?

RewriteRule ^/doc/(.*)/?$ /doc.php?path=$1 [QSA,L]

Юрий Насретдинов:
Александр Лукьянов:
С флажком [QSA] должен работать кстати
Дмитрий Эсс:
yUAC:
По неизвестным причинам у меня и без флажка работал.
Юрий Насретдинов:
Дмитрий Эсс:
:). Признак прямых рук. А если серьезно, то я вообще mod_rewrite для генерирования такого вида ссылок не использую. Я просто переписывал все пути на rewrite.php, а те, что не нужно переписывать (картинки например), я прописывал отдельно. Хотя в основном я просто модифицировал .htaccess Дмитрия Котерова :)

Эта тема на forum.dklab.ru