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

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

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

 

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

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

тема: как запретить целое слово в начале строки, а не отдельные символы? может что-то другое можно сделать?
 
 автор: naxa   (12.01.2011 в 18:38)   письмо автору
 
 

есть файл .htaccess
в нём я написал такое:

RewriteEngine on
Options +FollowSymlinks
RewriteBase /index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^album([0-9]+)_([0-9]+)$ /albdir/index.php?id=$1&alb=$2 [L,QSA]
RewriteRule ^photo([0-9]+)_([0-9]+)$ /albdir/photo.php?id=$1&fotid=$2 [L,QSA]
RewriteRule ^([^/]*)\.htmx$ /somedir/index.php?id=$1 [L,QSA]
RewriteRule ^([^/^\.^_]*)$ /index.php?id=$1 [L,QSA]

всё работает чётко, но регистрируется пользователь с ником some_girl и сайт начинает выдавать, что человек не найден. тогда я затираю в последней строке ^_
RewriteRule ^([^/^\.]*)$ /index.php?id=$1 [L,QSA]

но теперь при переходе в альбом на страницу /album77_99 - выдаёт страницу, что такой пользователь не найден %)

вопрос:

как в никнеймах запретить чтобы были строки вида album([0-9]+)_([0-9]+) или photo([0-9]+)_([0-9]+) ?

  Ответить  
 
 автор: cheops   (12.01.2011 в 18:41)   письмо автору
 
   для: naxa   (12.01.2011 в 18:38)
 

Хм... ну при регистрации просто проверяйте соответствует ли имя регулярным выражениям ^album([0-9]+)_([0-9]+)$ и ^photo([0-9]+)_([0-9]+)$ и если соответствует - говорите, что дескать такой пользователь уже существует, пожалуйста выберите другое имя. А в чем сложность?

  Ответить  
 
 автор: naxa   (12.01.2011 в 18:44)   письмо автору
 
   для: cheops   (12.01.2011 в 18:41)
 

нет нет, я не про то ...

я про то что сейчас все урлы определяются как пользователь и открывает index.php

нужно чтобы урлы, которые вида ^album([0-9]+)_([0-9]+)$ и ^photo([0-9]+)_([0-9]+)$ - открывали одно, если не соответствует, то index.php ...

сейчас почему-то это не работает. я думал что оно что выше, то "главнее", но на сервере не работает (хотя на локалке по таким урлам открывается то что надо)

========

пробовал писать что-то вроде

RewriteRule ^(?!album)([^/^\.^_]*)$ /index.php?id=$1 [L,QSA]

не функциклирует вроде :)

  Ответить  
 
 автор: cheops   (12.01.2011 в 18:47)   письмо автору
 
   для: naxa   (12.01.2011 в 18:44)
 

Тогда вот эту строку нужно будет как-то переделать
RewriteRule ^([^/^\.^_]*)$ /index.php?id=$1 [L,QSA]

Тем более в классе [] используется лишь одно отрицание ^, все что после него следует - отрицается, три ^ - это неправильно.

  Ответить  
 
 автор: cheops   (12.01.2011 в 18:50)   письмо автору
 
   для: naxa   (12.01.2011 в 18:38)
 

Вообще, чтобы отладить mod_rewrite и точно знать, что сработало, лучше включить лог запросов в виртуальном хосте (если конечно, дело на локальной машине происходит и у вас имеется доступ к httpd.conf)
<VirtualHost 127.0.0.1:80> 
    ... 
    RewriteLog logs/rewrite.log  
    RewriteLogLevel 9 
</VirtualHost>

  Ответить  
 
 автор: naxa   (12.01.2011 в 19:07)   письмо автору
 
   для: cheops   (12.01.2011 в 18:50)
 

действия происходят на локалке и на ВДСе.
на локалке работает как надо, на ВДСе не совсем

сейчас гляну логи (не знал что такое есть :))

  Ответить  
 
 автор: naxa   (12.01.2011 в 19:34)   письмо автору
9 Кб
 
   для: naxa   (12.01.2011 в 18:38)
 

RewriteEngine on
Options +FollowSymlinks
RewriteBase /index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^album([0-9]+)_([0-9]+)$ /albdir/index.php?id=$1&alb=$2 [L,QSA]
RewriteRule ^photo([0-9]+)_([0-9]+)$ /albdir/photo.php?id=$1&fotid=$2 [L,QSA]
RewriteRule ^([^/]*)\.htmx$ /somedir/index.php?id=$1 [L,QSA]
RewriteRule ^([^/^\.]*)$ /index.php?id=$1 [L,QSA]

================

Прикрепил лог.

с первого взгляда криминала не вижу :)


IP2 - - [12/Jan/2011:11:26:52 --0500] [domain/sid#801778b00][rid#805afe0a0/initial] (3) [perdir /home/user/data/www/domain/] strip per-dir prefix: /home/user/data/www/domain/album222_7 -> album222_7
IP2 - - [12/Jan/2011:11:26:52 --0500] [domain/sid#801778b00][rid#805afe0a0/initial] (3) [perdir /home/user/data/www/domain/] applying pattern '^album([0-9]+)_([0-9]+)$' to uri 'album222_7'
IP2 - - [12/Jan/2011:11:26:52 --0500] [domain/sid#801778b00][rid#805afe0a0/initial] (4) [perdir /home/user/data/www/domain/] RewriteCond: input='/home/user/data/www/domain/album222_7' pattern='!-f' => matched

что значат цифры в скобках ? ((2), (3), (4))

  Ответить  
 
 автор: naxa   (12.01.2011 в 20:48)   письмо автору
 
   для: naxa   (12.01.2011 в 18:38)
 

ребяяята, простите, на самом деле это я тупой %)

я в папке albdir по ошибке index.php c выводом фотографий заменил на index.php из корня, от того и весь головняк начался.

P.s. зато я узнал, что RewriteCond %{REQUEST_FILENAME} !-f - проверка существование запрошенного файла (сам писал - сам забыл :)).

флаг L - это значит если правило совпадает - дальше не прверяем.

узнал как смотреть логи мод рерайта.

Всем спасибо за внимание, проблема решена :)

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

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