Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

htaccess mod_rewrite

42K
26 марта 2010 года
vathsven
30 / / 11.11.2009
создано правило :
RewriteEngine On
RewriteBase /some/
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ index.php?page=$1&cat=$2&id=$3 [L,QSA]
т.е. index.php все переменные GET переваривает.

но например если вводишь /some/xxx.ru/monkey/ (хочешь передать только ?page например, без остальных cat,id ..) оно уже не работает.
как сделать чтобы правило работало, если даже не хватает хотя бы 1 параметра в URL ??
92
26 марта 2010 года
Тень Пса
2.2K / / 19.10.2006
вообще, нужно бы передавать всю строку в скрипт, а он пусть сам разбирается. так делает вордпресс, например.
или учить reg-exp'ы, и учиться использовать ?/*/{0,1} и прочее )
253
26 марта 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: vathsven

но например если вводишь /some/xxx.ru/monkey/ (хочешь передать только ?page например, без остальных cat,id ..) оно уже не работает.


Так конечно оно не будет работать, у тебя же жёстко прописаны именно три параметра.
Я бы сделал через сам php-скрипт, то есть передавал бы ему строку, которую он бы сам разбивал на переменные - в php это делается одной строкой, а с mod_rewrite ты замучаешься. Например:

 
Код:
@list($page, $cat, $id) = explode($_SERVER['QUERY_STRING'];

.htaccess для этого выглядит так:
 
Код:
...
RewriteRule ^/?some/(.*)$ index.php?$1


Либо, если надо именно через mod_rewrite, можно извратиться так:
 
Код:
...
RewriteRule ^/?some/( ([^/]*) (/ ([^/]*) (/ ([^/]*/?) )? )? )?$ index.php?page=$2&cat=$4&id=$6 [L,QSA]

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

upd:
Тень Пса, опередил :)
42K
29 марта 2010 года
vathsven
30 / / 11.11.2009
а еще подскажите как сделать чтобы типа xxx.ru/first/second/third/fourth все это принимал index.php, потомучто вот это
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

на второй записи ломается типа xx.ru/first/second/third, картинки перестает показывать даже ... ;)
92
29 марта 2010 года
Тень Пса
2.2K / / 19.10.2006
у тебя картинки с relative-путями. т.е. не относительно корня сайта.
либо пользуй <base href="/" />, либо прописывай полные пути к картинкам, не <img src="images/blah.jpg" />, а <img src="/images/blah.jpg" />

ну и все ссылки ессна.
42K
29 марта 2010 года
vathsven
30 / / 11.11.2009
Цитата: Тень Пса
у тебя картинки с relative-путями. т.е. не относительно корня сайта.
либо пользуй <base href="/" />, либо прописывай полные пути к картинкам, не <img src="images/blah.jpg" />, а <img src="/images/blah.jpg" />

ну и все ссылки ессна.



а через .htaccess нельзя никак root определить из которого работаю ? rewritebase пробовал тоже чето не работает ...

253
29 марта 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: vathsven
а через .htaccess нельзя никак root определить из которого работаю ? rewritebase пробовал тоже чето не работает ...


Ты пойми, что браузер запрашивает именно так, как он видит структуру. То есть, ты в папке /site/www, он её считает корнем, потом он в /site/www/first/second/ - и считает, что и first и second это реальные папки на диске, и просит у сервера картинки ,которые находятся по пути first/second/. Он не знает, что это у тебя такая хитрая структура запросов, да оно ему и не надо.

Поэтому либо используй base href, либо меняй все ссылки на абсолютные (чего обычно надо избегать), либо сделай уникальное имя для папки с картинками, и в .htaccess пропиши правило вролде:

 
Код:
RewriteRule /root_images/(.*)$ /site/www/images/$1 [L]
42K
29 марта 2010 года
vathsven
30 / / 11.11.2009
base href к тому же не везде корректно работает, проще делать типа того наверное xxx.ru/news.20.09.2010 ...
92
29 марта 2010 года
Тень Пса
2.2K / / 19.10.2006
ну расскажи внукам, что оно не везде работает :)))
http://www.w3schools.com/TAGS/tag_base.asp
253
29 марта 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: Тень Пса
ну расскажи внукам, что оно не везде работает :)))
http://www.w3schools.com/TAGS/tag_base.asp


Просто у некоторых товарищей есть очень сильная потребность в изобретении велосипеда третьей ногой...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог