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

Форум Apache

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

 

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

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

тема: mod_rewrite: где лучше располагать правила - в корне сайта или в папке назначения?
 
 автор: tAleks   (22.04.2011 в 12:40)   письмо автору
 
 

В корне сайта лежит .htaccess в котором есть правило отрезания префикса www от всех доменов.


RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.([^/]+)\.ru$ [NC]
RewriteRule ^(.*)$ http://%1.ru/$1 [R=301,L]


На сайте есть папка over, в которой есть скрипт выдающий статьи. URL выглядит так:
http://site.ru/over/over.php?id=120

Хочу сделать ЧПУ.

Вопрос в следующем. Все правила лучше писать в .htaccess который лежит в корне?
Или для этого URL создать .htaccess в папке over, и в нем сделать отдельное правило? (если такое вообще возможно. я в мод_реврайте не очень разбираюсь).

  Ответить  
 
 автор: cheops   (22.04.2011 в 13:54)   письмо автору
 
   для: tAleks   (22.04.2011 в 12:40)
 

Большого значения не имеет, можете и там и там их добавлять: как вам удобнее их создавать и отлаживать.

  Ответить  
 
 автор: tAleks   (22.04.2011 в 16:03)   письмо автору
 
   для: cheops   (22.04.2011 в 13:54)
 

В .htaccess, который лежит в корне сайта добавил строку:

# /over/user/1/ to /over/over.php?id_user=1
RewriteRule ^over/([A-Za-z0-9-]+)/([0-9]+)/?$ over/over.php?id_user=$1 [L]


Весь блок мод_реврайта выглядит так:


RewriteEngine On
Options +FollowSymlinks

RewriteBase /

# Отрезаем префикс www
RewriteCond %{HTTP_HOST} ^www\.([^/]+)\.ru$ [NC]
RewriteRule ^(.*)$ http://%1.ru/$1 [R=301,L]

# /over/user/1/ to /over/over.php?id_user=1
RewriteRule ^over/([A-Za-z0-9-]+)/([0-9]+)/?$ over/over.php?id_user=$1 [L]


Когда захожу по адресу: site.ru/over/user/1/ - сайт вешается, как будь-то идет вечный редирект на эту же страницу.
Когда захожу по адресу: site.ru/over/user/1 (без слэша в конце) - выдается ошибка 404.

Подскажите, что неправильно?

  Ответить  
 
 автор: tAleks   (22.04.2011 в 16:32)   письмо автору
 
   для: tAleks   (22.04.2011 в 16:03)
 

С этим разобрался. :)

  Ответить  
 
 автор: tAleks   (22.04.2011 в 16:48)   письмо автору
 
   для: cheops   (22.04.2011 в 13:54)
 

Теперь возник еще такой вопрос.

Положил в папку over .htaccess следующего содержания:

RewriteEngine On
Options +FollowSymlinks

RewriteBase /over/

# user/1/ to over.php?id_user=1
RewriteRule ^user/([0-9]+)/?$ over.php?id_user=$1 [L]


При заходе на site.ru/over/user/1/ - все работает.
а когда захожу так: www.site.ru/over/user/1/ (c префиксом www) - мод_реврайт, который лежит в корне не работает. www не отрезает и выдает ошибку 404.

Это так и должно быть?


Пробовал в "местынй" .htaccess добавить строки по обрезанию www:

RewriteEngine On
Options +FollowSymlinks

RewriteBase /over/

RewriteCond %{HTTP_HOST} ^www\.([^/]+)\.ru$ [NC]
RewriteRule ^(.*)$ http://%1.ru/$1 [R=301,L]

# user/1/ to over.php?id_user=1
RewriteRule ^user/([0-9]+)/?$ over.php?id_user=$1 [L]


При этом идет переадресация на: http://site.ru/user/897/ (неправильно, и ошибка 404)
Я так пологаю, что это из-за RewriteBase /over/

Пробовал сделать так:


RewriteEngine On
Options +FollowSymlinks

RewriteBase /

RewriteCond %{HTTP_HOST} ^www\.([^/]+)\.ru$ [NC]
RewriteRule ^(.*)$ http://%1.ru/$1 [R=301,L]

# user/1/ to over.php?id_user=1
RewriteRule ^over/user/([0-9]+)/?$ over/over.php?id_user=$1 [L]


При заходе на site.ru/over/user/1/ - ошибка 404
при заходе на www.site.ru/over/user/1/ (c префиксом www) переадресация на site.ru/user/1/

Подскажите что тут не правильно.


Вообще реально сделать так, чтобы в коневом .htaccess было правило по обрезанию www, а в местных папках правила преобразования местных УРЛов? и чтобы это все работало? Если можно, то как это сделать?

  Ответить  
 
 автор: tAleks   (28.04.2011 в 15:30)   письмо автору
 
   для: tAleks   (22.04.2011 в 16:48)
 

Кто-нибудь поможет в этом разобраться? Вопрос остается открытым.
Укого есть опыт, делитесь пожалуйста. :) Буду очень сильно благодарен.

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

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