Ru-Board.club
← Вернуться в раздел «Web-программирование»

» mod_rewrite: документация, готовые решения, вопросы

Автор: Qwezar
Дата сообщения: 01.02.2007 11:22
2ramil

Приписываешь в .htaccess:

Код:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*).html$ /index.php?id=$1
Автор: dacuan
Дата сообщения: 01.02.2007 16:21
Qwezar
Тогда можно просто вот так

Код:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\/]+)/([^\/]+)?$ /index.php?m=$1&a=$2
Автор: Qwezar
Дата сообщения: 01.02.2007 18:31
dacuan

Возможно, а что если у меня в ссылке первая перемнная не 'm', а 'q' допустим?
Автор: dacuan
Дата сообщения: 02.02.2007 09:53
Qwezar

Цитата:
Возможно, а что если у меня в ссылке первая перемнная не 'm', а 'q' допустим?

И в чем проблема?
Автор: Qwezar
Дата сообщения: 02.02.2007 12:21
dacuan

ну если у меня будет так:

www.site.ru/page/1

то 'm' будет равна 'page', а мне нужно чтоб 'q' была равна 'page'.
Автор: dacuan
Дата сообщения: 02.02.2007 15:48
Qwezar
Перечитываем условие задачи

Цитата:
нужно, чтобы все запросы к /folder перенаправлялись на /index.php?m=folder, а /folder/param на /index.php?m=folder&a=param, и чтобы ещё настоящая папка /forum тоде была доступна. можете помочь?


Ни слова о q! Откуда оно взялось?
Автор: Qwezar
Дата сообщения: 02.02.2007 16:07
dacuan

это мы уже мой вопрос обсуждаем
Автор: dacuan
Дата сообщения: 02.02.2007 17:12
Qwezar
Тогда давай полное описание проблемы
Автор: 2ramil
Дата сообщения: 03.02.2007 18:58
dacuan
спасибо вариант работает, но охота ещё кой чего: чтобы был и третий параметр $b в пути, ну т.е. /folder/param/param1 == /?m=$1&a=$2&b=$3 и чтобы реврайт рул действовал и без завершающего слеша, например /folder, а не /folder/. проблему с существующими папками вроде как решил:
RewriteCond %{REQUEST_URI} !^/tpl/
RewriteCond %{REQUEST_URI} !^/forum/
Автор: Moonke
Дата сообщения: 04.02.2007 22:57
Можно ли объединить в одном htaccess 2 условия ?
ПЕРВОЕ:
RewriteEngine on
RewriteBase /
RewriteCond %{REMOTE_ADDR} ^69.
RewriteRule ^(.*)а1.php(.*)$ $1а2.php$2
ВТОРОЕ:
RewriteEngine on
RewriteBase /
RewriteCond %{REMOTE_ADDR} ^68.
RewriteRule ^(.*)а3.php(.*)$ $1а4.php$2

Автор: Cheery
Дата сообщения: 04.02.2007 23:03
Moonke

Цитата:
Можно ли объединить в одном htaccess 2 условия ?

только без второго

Цитата:
RewriteEngine on
RewriteBase /


Автор: Moonke
Дата сообщения: 05.02.2007 00:00


Цитата:
только без второго


уже работает - спасибо
Автор: dacuan
Дата сообщения: 05.02.2007 10:04
2ramil

Цитата:
проблему с существующими папками вроде как решил:
RewriteCond %{REQUEST_URI} !^/tpl/
RewriteCond %{REQUEST_URI} !^/forum/


Разве не сработало

Цитата:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

?


Цитата:
спасибо вариант работает, но охота ещё кой чего: чтобы был и третий параметр $b в пути, ну т.е. /folder/param/param1 == /?m=$1&a=$2&b=$3


По аналогии

Цитата:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\/]+)/(([^\/]+)([^\/]+)?)?$ /index.php?m=$1&a=$3&b=$4



Цитата:
и чтобы реврайт рул действовал и без завершающего слеша, например /folder, а не /folder/

Универсальное решение для борьбы с завершающими слэшами я уже давал в этой ветке, поищи.
Автор: 2ramil
Дата сообщения: 05.02.2007 15:38
dacuan
пасиба

Цитата:
Универсальное решение для борьбы с завершающими слэшами я уже давал в этой ветке, поищи

ок, попробую пролистать все 10 страниц


Добавлено:
зы. а вот, нашол

Цитата:

###########################
# SLASH PROBLEM
###########################

RewriteCond %{REQUEST_URI} !/$
RewriteCOND %{REQUEST_URI} ![^/]*\.[^/]*$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [NS,L,R=301]
Автор: Moonke
Дата сообщения: 15.02.2007 15:32
почему-то не срабатывает такая запись :

RewriteCond %{REMOTE_HOST} ^www.google.ca$
RewriteRule ^(.*)a1.php(.*)$ $1a2.php$2

Варианты с заменой www.google.ca$ на:
www.google.ca/
http://www.google.ca/
http://www.google.ca/*
http://www.google.ca.
тоже не работают

Автор: Qwezar
Дата сообщения: 17.02.2007 19:46
Столкунля с проблемой:

Код: RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/(.*).htm$ /index.php?a=$1&b=$2&c=$3
Автор: andead
Дата сообщения: 18.02.2007 16:23
можно книжку из шапки перезалить: Фридл Дж. Регулярные выражения
ftp не отвечает
Автор: Brodyaga
Дата сообщения: 18.02.2007 16:52
Qwezar
Все по логике. Делайте вручную уровни:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/(.*).htm$ /index.php?a=$1&b=$2&c=$3
RewriteRule ^(.*)/(.*).htm$ /index.php?a=$1&b=$2
RewriteRule ^(.*).htm$ /index.php?a=$1
Или как вам там надо. По другому никак, или обрабатывайте УРЛы скриптом.

Добавлено:
andead
В шапке есть новая прямая ссылка на книжку.
Автор: Qwezar
Дата сообщения: 18.02.2007 19:24
Brodyaga

Так пробовал, не получается, если ввести _http://site/a/b/c.htm, то id все берет на себя, да и при этом еще почему то index.php в начале возвращает.

Придется пользоваться скриптами.
Автор: andead
Дата сообщения: 18.02.2007 22:33
Qwezar
а если так:
RewriteRule ^\/(.*?)\/(.*?)(\/(.*?))?\.htm$ /index.php?a=$1&b=$2&c=$4

Добавлено:
возможно слэши в htaccess экранировать не нада, но я по привычке)
Автор: Qwezar
Дата сообщения: 19.02.2007 08:30
andead

Напиши плизз нормально, а то че то, что с экранированием что без, не пашет вообще
Автор: andead
Дата сообщения: 20.02.2007 22:08
Qwezar
RewriteRule ^/(.*?)/(.*?)(/(.*?))?\.htm$ /index.php?a=$1&b=$2&c=$4

в апаче не проверял, в Regex Coach ( http://weitz.de/regex-coach/ ) только посмотрел
Автор: Terby
Дата сообщения: 27.02.2007 00:43
Всем доброго времени суток

Столкнулся с проблемой отторжения авторизации при использовании редиректа с применением mod_rewrite

В корне ресурса прописан htaccess со следующим содержанием:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.ru$
RewriteRule ^(.*)$ http://www.domain.ru/$1 [R=301,L]

Этим, мы заставлем apache переадресовывать все адреса без www на www зеркало.
Все адреса без www прекрасно переадресовываются,

однако, если ссылаться на директорию, которая защищена http-авторизацией, запроса на ввод логина пароля не появляется, вместо этого, сразу идет редирект на 401 ошибку http://domain.ru/401.shtml

В заголовках общения с сервером, обнаружил, что при переадресации через mod_rewrite на запароленную директорию, после
фразы WWW-Authenticate сразу идет строка: location http://domain.ru/401.shtml, которая и провоцирует редирект.

Искал долго, перепробовал множество сочетаний флажков RewriteRule, но к сожалению решения так и не нашел.
Автор: Cheery
Дата сообщения: 27.02.2007 00:46
Terby
пробуй, как написал ранее, кидать на файл с <meta> который перекидывает куда надо.

а так, ты что то придумываешь.. у меня у самого стоит подобная переадресация и нормально работает с дирами под паролем

Цитата:
IP - - [26/Feb/2007:17:44:55 -0500] "GET /dir/ HTTP/1.1" 302 281 "-" "Mozilla/4.0"
IP - - [26/Feb/2007:17:44:55 -0500] "GET /dir/ HTTP/1.1" 401 1678 "-" "Mozilla/4.0"


как сам видишь.. сначала переадресация, а потом запрос пароля..
Автор: Terby
Дата сообщения: 27.02.2007 01:03
c мета не прокатит. Все на одном аккаунте и в RewriteCond в оригинале около трех доменов
Автор: Cheery
Дата сообщения: 27.02.2007 01:08
Terby
я же говорю.. все работает..
убери только послед. слэш - а то будет повторяться, так как запрос вида server/url перейдет в www.server//url
Автор: Terby
Дата сообщения: 27.02.2007 01:18
там регулярное выражение, экранируется точка - адрес переадресовывается правильно.

Напиши дословно свой htaccess
Автор: Cheery
Дата сообщения: 27.02.2007 01:33
Terby

Цитата:
там регулярное выражение, экранируется точка - адрес переадресовывается правильно.

я не об этом

Цитата:
RewriteRule ^(.*)$ http://www.domain.ru/$1

вот тут последний слэш не нужен..


Цитата:
Напиши дословно свой htaccess

у меня в httpd.conf, но смысл не меняется.. написано тоже самое. Apache 2.2.4, но это используется с первых версий apache 2.. да и без разницы тут.. первый или второй апач.
Автор: Terby
Дата сообщения: 27.02.2007 02:06
Ты напутал. Убрал слеш, получился при переадресации вот такой веселый урл: http://www.domain.ru401.shtml
Автор: Cheery
Дата сообщения: 27.02.2007 02:08
Terby

Цитата:
Ты напутал.

я напутал ? это у тебя что то не так.. как идет запрос?
GET /url
ну так вот /url и отлавливается регуляркой
Цитата:
^(.*)$

у тебя какая версия апача?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

Предыдущая тема: PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.