Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > Поговорим о RewriteCond, RewriteRule, ЧПУ


Автор: numerovan 2.4.2015, 20:01
Поясните пожалуйста работу RewriteCond, RewriteRule.

В инете, сколько перерыл, все сводится именно сюда: 
http://www.egoroff.spb.ru/portfolio/mod_rewrite.html
http://www.egoroff.spb.ru/portfolio/rewriteguide.html

RewriteCond - это значит что у нас условия, если они верны, то выполняется RewriteRule

Есть картинка, с тех же ссылок
http://www.egoroff.spb.ru/apache/images/mod_rewrite_fig1.gif

Приведу сразу пример (наиболее популярный) и ход своих мыслей:
Код

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

Если HTTP_HOST (далее test.ru) встречается один раз или более, но меньше 10 раз в строчке с патерном www.(.*) (регистронезивисемым [NC]), то примени правило RewriteRule, а именно ^/?(.*) прямой слеш 0 или 1 раз и далее любой символ ... если совподение произошло, то вырубай проверку далее  (L) и делай редирект ® с опцией (permanent, т.е. документ перемещен постоянно, можно и цифру в место слова поставить 301, что равно этому перманенту). Если все нормально, то в %1 поставь test.ru, а в $1 поставь любой символ из ноль или более раз.

Вот еще пример и правильно ли я мыслю:
Код

RewriteCond (что-то)
RewriteCond (что-то)
RewriteCond (что-то)
RewriteRule (что-то)

Если совпадут три условия, то только потом выполни RewriteRule. Если все верно, то похоже на следующую схему в программировании:
Код

if(условие && условие && условие)
     (что-то выполнить)


Вот еще пример и правильно ли я понимаю:
Код

RewriteCond (что-то №1)
RewriteRule (что-то №2)
RewriteRule (что-то №3)

Примени правило RewriteCond №1 только для RewriteRule №2, а RewriteRule №3 выполни в любом случае.

----------------------------------------------------------------------------------------------------------------------------
Теперь задача:
Если в URL бывает таким: http://test.ru/1/2/3/.../n. Как лучше прописать правила и обрабатывать их скриптом? Н а данный момент я пока сделал следующее:
Код

RewriteRule ^([a-z-]+)$                                                                /ads.php?v[]=$1                                    [QSA]
RewriteRule ^([a-z-]+)/([a-z-]+)$                                                        /ads.php?v[]=$1&v[]=$2                                [QSA]
RewriteRule ^([a-z-]+)/([a-z-]+)/([a-z-]+)$                                            /ads.php?v[]=$1&v[]=$2&v[]=$3                        [QSA]
RewriteRule ^([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)$                                    /ads.php?v[]=$1&v[]=$2&v[]=$3&v[]=$4                [QSA]
RewriteRule ^([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)$                        /ads.php?v[]=$1&v[]=$2&v[]=$3&v[]=$4&v[]=$5        [QSA]
RewriteRule ^([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)$                /ads.php?v[]=$1&v[]=$2&v[]=$3&v[]=$4&v[]=$5&v[]=$6    [QSA]

но чувствую что это не правильно, где-то видил вариант следующий - посылать только в одну переменую, н-р вот так:
Код

RewriteRule ^catalog/(.*)$ /page.php?v=$1 [QSA] // слово catalog - как некий идентификатор

и чтоб один скрипт обрабатывал дальнейшую работу, на сколько понимаю что переменная "v" должна принимать массив со всеми необходимыми параметрами.

Автор: numerovan 6.4.2015, 16:04
чет ни какого прогресса нет )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)