Кирилл Б.
41 повідомлення
#15 років тому
На сайте есть каталог продукции и несколько информационных страниц. Разделы каталога имеют адрес, например, domain.ru/catalog/category1/..., а инфо. страницы domain.ru/razdel1/... Нужно сделать следующее: если в адресе есть слово "catalog/", то запрос передаётся файлу catalog.php, иначе запрос передаётся файлу contant.php. Вот содержание файла .htaccess.


RewriteEngine On
RewriteBase /

RewriteRule ^catalog\/(.*)$ catalog.php?var=$1
RewriteRule ^(.*)$ content.php?var=$1


Если убрать 2-ое правило, то каталог работает правильно. Но в таком виде все запросы уходят к content.php, а в var получается "content.php". Подскажите что нужно исправить?
Роман П.
1599 повідомлень
#15 років тому
Вот такое будет работать. Дело в том, что у вас к htaccess апач обращается два раза - первый раз к первому правилу, преобразует URL, а так как появилось новое URL, то опять идет по кругу - но уже ко второму правилу обращается, с первым совпадения нет. Кароче, надо условием отрубать второй круг

RewriteRule ^catalog(.*)$ catalog.php?var=$1 
RewriteCond %{REQUEST_URI} !catalog.php$
RewriteRule ^(.*)$ content.php?var2=$1


с вас пиво))
Кирилл Б.
41 повідомлення
#15 років тому
Paralysed, спасибо за подсказку, но Ваш способ не сработал. ((
Роман П.
1599 повідомлень
#15 років тому
Это не мой способ, это стандартная штука для понимающих, как работает mod_rewrite. Я не знаю, что у вас там на самом деле с путями и т.д., поэтому пробуйте варианты. Распечатайте REQUEST_URI и посмотрите, что в нем (естественно, с закоментированным вторым правилом). Может быть это не catalog.php, пишите в rewriteCond то что там. Блин, ну чего я объясняю, сами должны понимать что такое rewriteCond ) а способ 100% верный.
Кирилл Б.
41 повідомлення
#15 років тому
В тех. поддержке хостинга подсказали такое решение:

RewriteEngine On
RewriteBase /

RewriteRule ^catalog\/(.*)$ catalog.php?var=$1
RewriteRule ^(+)$ content.php?var=$1


Наверное у них Апач как-то хитро настроен, но вот так всё заработало...
Роман П.
1599 повідомлень
#15 років тому
Ну да, тоже способ, но если только вы уверены, что в URL будут только эти символы.

Слушайте, как вы сайты делаете, если ничего не понимаете? Этот способ сработал, потому что в списке символов нет точки, знака вопроса и равно, а после первого обращения апача к первому правилу URL становится catalog.php?var - т.е. с точкой и вопросиком) поэтому второе правило не подходит при второй заходе)
Кирилл Б.
41 повідомлення
#15 років тому
Цитата:
Ну да, тоже способ, но если только вы уверены, что в URL будут только эти символы.

Уверен.

Цитата ("Paralysed"):
Слушайте, как вы сайты делаете, если ничего не понимаете?

На своих сайта я такие проблемы обхожу заранее, а сейчас приходится исправлять косяки другого программиста.
Роман П.
1599 повідомлень
#15 років тому
Цитата ("webx"):
На своих сайта я такие проблемы


Лан, забейте.. это не проблема, это абсолютно прозрачная работа апача, именно такая, как описана в документации.