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

Форум Apache

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

 

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

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

тема: Вопросы по Mod Rewrite
 
 автор: Indemion   (27.02.2008 в 16:08)   письмо автору
 
 

Задумался над организацией ЧПУ на одном из своих сайтов и обнаружил очередной пробел.

1. Options +FollowSymlinks – прочитал об этом в интернете, но мой перегруженный мозг не воспринял научные объяснения. Расскажи простыми словами, что делает эта строка?

2.
RewriteEngine on
RewriteBase /
# Одинарный путь: http://сайт.ru/index.php?menu=new на понятный URL сайт.ru/new.html
RewriteRule ^([^/]*)\.html$ /index.php?menu=$1 [L]
# Двойной путь: http://сайт.ru/index.php?menu=article_view&article_id=5
Получилось
RewriteRule ^([^/]+)/([^/]+)\.html$ /index.php?menu=$1&article_id=$2 [L]

Теперь вопросы:
а)Здесь не очень понял [L] – это значит, что если соответствие найдено, то дальше не ищем?
б) А если не menu? Можно написать общее правило для одной передаваемой переменной?
Например: action=1, test=ok, menu=new и т.п.
в) А www учитывается или нужно под него свое правило писать?
г) Какая конструция лучше со знаком «*» или со знаком «+»

   
 
 автор: mihdan   (27.02.2008 в 17:38)   письмо автору
 
   для: Indemion   (27.02.2008 в 16:08)
 

С этими вопросами вам лучше в форум регулярок, так ваши вопросы именно в этом
[L] (Last) - последний

   
 
 автор: Indemion   (27.02.2008 в 17:50)   письмо автору
 
   для: Indemion   (27.02.2008 в 16:08)
 

Да, и вот еще что. Хочу получить: http://сайт.ru/article_view-5.html
Однако когда убираю / и ставлю дефис, то правило перестает работать.
RewriteRule ^([^/]+)-([^/]+)\.html$ /index.php?menu=$1&article_id=$2 [L]

Как с этим бороться?

   
 
 автор: mihdan   (27.02.2008 в 18:13)   письмо автору
 
   для: Indemion   (27.02.2008 в 17:50)
 

С этими вопросами вам лучше в форум регулярок


RewriteRule ^([^/]+)\-([^/]+)\.html$ /index.php?menu=$1&article_id=$2 [L]

   
 
 автор: mihdan   (27.02.2008 в 18:16)   письмо автору
 
   для: Indemion   (27.02.2008 в 16:08)
 


* - Предыдущий символ встречается 0 или больше раз.
+ - Предыдущий символ встречается 1 или больше раз.
? - Предыдущий символ встречается 0 или 1 раз.

   
 
 автор: Indemion   (27.02.2008 в 18:38)   письмо автору
 
   для: mihdan   (27.02.2008 в 18:16)
 

Это я знаю. Мне не ясно почему такая конструкция не работает:
RewriteRule ^([^/]+)-([^/]+)\.html$ /index.php?menu=$1&article_id=$2 [L]
Уж очень не хочется с виртуальными директориями заморачиваться.

   
 
 автор: Indemion   (27.02.2008 в 21:48)   письмо автору
 
   для: Indemion   (27.02.2008 в 18:38)
 

Я примерно понял в чем проблема:

Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^([^/]+)\.html$ /index.php?menu=$1
RewriteRule ^([^-]+)-([^-]+)\.html$ /index.php?menu=$1&article_id=$2 [L]

Два последних правила почему-то исключают друг друга. Хорошо бы разобраться ))

   
 
 автор: mihdan   (27.02.2008 в 23:53)   письмо автору
 
   для: Indemion   (27.02.2008 в 21:48)
 


Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^([^/]+)\.html$ /index.php?menu=$1 [L]
RewriteRule ^([^-]+)-([^-]+)\.html$ /index.php?menu=$1&article_id=$2 [L]

   
 
 автор: Indemion   (28.02.2008 в 10:40)   письмо автору
 
   для: mihdan   (27.02.2008 в 23:53)
 

Этот вариант не будет работать. Пробовал еще вчера и с [L] и без.
Пока, как вариант, сделал разбивку по суффиксам: \.html (для одной переменной) и \.htm (для двух). Работает, но притянуто за уши...

   
 
 автор: mihdan   (29.02.2008 в 15:09)   письмо автору
 
   для: Indemion   (28.02.2008 в 10:40)
 


Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^([^-]+)-([^-]+)\.html$ /index.php?menu=$1&article_id=$2 [L] 
RewriteRule ^([^/]+)\.html$ /index.php?menu=$1 [L]

   
Rambler's Top100
вверх

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