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

Форум Регулярные Выражения

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

 

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

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

тема: Не могу понять где ошибка
 
 автор: bb-kirpich   (06.02.2012 в 21:30)   письмо автору
 
 

Не могу понять где здесь ошибка?
RewriteRule ^(?:([-a-zA-Z]+)[/]?)?(?:cid([0-9]+)[/]?)?$ /index.php?city=$1&cid=$2 [L,QSA]

  Ответить  
 
 автор: Sfinks   (06.02.2012 в 21:58)   письмо автору
 
   для: bb-kirpich   (06.02.2012 в 21:30)
 

Вообше-то первый раз вижу чтоб в RewriteRule использовали конструкцию (?:шаблон)
Ну если вы говорите, что во втором апаче работает, то там наверно это ввели. Сколько читал описаний мод_реврайта, все были под первый апач и нигде эта конструкция не упоминалась. Собстно не понятно зачем она вообще здесь нужна.
Кроме того, тут: [-a-zA-Z] первый дефис надо экранировать. А тут: [/]? не понятно зачем [ ].
Короче я б так написал
RewriteRule ^(([a-zA-Z\-]+)/?)?cid([\d]+)/?$ /index.php?city=$2&cid=$3 [L,QSA]

  Ответить  
 
 автор: bb-kirpich   (06.02.2012 в 22:16)   письмо автору
 
   для: Sfinks   (06.02.2012 в 21:58)
 

Спасибо, но выдает ошибку 404:( Не туда переадресовывает
Полный код, может еще что я натупил:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(([a-zA-Z\-]+)/?)?cid([\d]+)/?$ /index.php?city=$1&cid=$2 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(([a-zA-Z\-]+)/?)?id([\d]+)/?$ /index.php?city=$1&id=$2 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(([a-zA-Z\-]+)/?)?([\d]+)/?$ /index.php?city=$1&p=$2 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(([a-zA-Z\-]+)/?)?add([\d]+)/?$ /index.php?city=$1&p=add&cid=$2 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ - [R=404]


вообще задача такова:
/city/cid00/ = /index.php?city=city&cid=00
/city/id00/ = /index.php?city=city&id=00
/city/xxx/ = /index.php?city=city&p=xxx
/city/add00/ = /index.php?city=city&p=add&cid=00

Помогите написать условия под эту задачу. Понимаю что уровень вопроса очень плох:) Но мне нужно доделать быстро эту работу, а к следующей я уже выучу регулярные выражения:)

  Ответить  
 
 автор: Sfinks   (07.02.2012 в 09:18)   письмо автору
 
   для: bb-kirpich   (06.02.2012 в 22:16)
 

во первых смотрите внимательнее.... Не city=$1&cid=$2 , а city=$2&cid=$3
ща дальше погляжу

  Ответить  
 
 автор: Sfinks   (07.02.2012 в 09:46)   письмо автору
 
   для: bb-kirpich   (06.02.2012 в 22:16)
 

Во вторых в первой части РВ:
(([a-zA-Z\-]+)/?)?
выделенное жирным зачем? Разве части city/ в ссылке может не быть? Если я прально понимаю логику она должна быть всегда.
В третих
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ - [R=404]
лучше убрать и перед RewriteEngine on вписать стандартное ErrorDocument 404 404.html
В четвертых врядли у вас когда-нибудь будут на втором уровне папки вида cid000, id000 и add000. Значит RewriteCond %{REQUEST_FILENAME} !-d в этих трех случаях не имеют смысла.
В пятых url вида /volgogradcid25, т.е. без второго и третьего слеша разве возможен? Если нет, то после слешей вопросы тоже не нужны. Хотя после третьего оставим, т.к. /volgograd/cid25 наверно допустимо.
В результате я бы написал так:
ErrorDocument 404 404.html
Options +FollowSymlinks 

RewriteEngine on 
RewriteBase / 
                            
RewriteRule ^([a-zA-Z\-]+)/(c?id)([\d]+)/?$ index.php?city=$1&$2=$3 [L,QSA]
RewriteRule ^([a-zA-Z\-]+)/add([\d]+)/?$ index.php?city=$1&p=add&cid=$2 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z\-]+)/([\d]+)/?$ /index.php?city=$1&p=$2 [L,QSA]

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

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