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

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

Автор: Only4You
Дата сообщения: 04.03.2010 07:53
Есть такой код

Код:
RewriteEngine On
RewriteBase /
**********
RewriteRule ^(product_info|index|shop_content).php(.*)$ red.php [L]
RewriteRule ^.*\.gif|\.jpg|\.png|\.css|\.js$ - [L]
RewriteRule ^(.*).html(.*)$ test.php [L] "
Автор: Cheery
Дата сообщения: 04.03.2010 18:55
Only4You

Цитата:
Как можно сделать при данных настройка его в исключение?

по нормальному - никак. перекидывайте все запросы на скрипт и в нем и проверяйте настройки или авторизацию.
можно, конечно, добавить RewriteCond на проверку куки, если хочется.
Автор: bazzjr
Дата сообщения: 04.03.2010 19:31
Как можно записать регуляркой(как можно компактнее) данную строку в htaccess:

search/any_name=345/name245=657/any_name=312/name13=845/any_name9803=190 и т.д.

И можно ли сильней сократить эту строку?

И еще вопрос:

Если пользователь ввел в адресную строку адрес вида - http://site.ru/?a=1&b=2
То есть ли возможность перенаправить его на страницу http://site.ru/search/?a=1&b=2 но при этом в адресной строке скрыть адрес http://site.ru/search/?a=1&b=2, а отобразить например http://site.ru/search/ ?

т.е. другими словами, как сделать так, чтобы в адресной строке не было видно запросов типа a=1&b=2?
Автор: bazzjr
Дата сообщения: 09.03.2010 14:24
мдеее... ответа так и нет...
Автор: dacuan
Дата сообщения: 09.03.2010 14:45
bazzjr

Цитата:
Как можно записать регуляркой(как можно компактнее) данную строку в htaccess:

search/any_name=345/name245=657/any_name=312/name13=845/any_name9803=190 и т.д

Например так:

Код: RewriteRule ^search/((([a-z0-9]+)=([^/]*)/)+) bin/myscript.php?vars=$1
Автор: russko
Дата сообщения: 09.03.2010 20:47
Есть адрес:

Цитата:

http://bla-bla-bla/report/month_detail.cgi?year=2010&month=03

Необходимо чтобы в браузере фактически отобразилась строка

Цитата:

http://bla-bla-bla/report/user_detail.cgi?year=2010&month=03&user=alf&mode=month

Где юзер "alf" - пользователь прошедший авторизацию в .htaccess

Файл .htaccess содержит строку вида:

Цитата:

AuthType Basic
AuthName "Server statistic"
AuthUserFile /usr/apache/local/.htpasswd
Require valid-user

RewriteEngine on
RewriteRule month_detail.cgi(.*)$ /report/user_detail.cgi?$1&user=%{REMOTE_USER}&mode=month [L]

и никак это правило работать не хочет! Если вместо %{REMOTE_USER} явно указать ник alf то откроется страница, но без строки: "year=2010&month=03" в урле...
Подскажите как правильно написать правило чтобы решить задачку, описанную в начале?
Автор: bazzjr
Дата сообщения: 10.03.2010 06:35

Цитата:
А зачем это надо? Чтобы нельзя было добавить в закладки ссылку на результаты поиска?

dacuan не совсем так. Есть части сайта, где работа происходит посредством ajax и адресной строки(GET), и хотелось бы чтобы пользователь совсем ничего не видел бы в адресной строке, ну или видел то, что ему покажет админ.

Насчет укорочения

Цитата:
RewriteRule ^search/((([a-z0-9]+)=([^/]*)/)+) bin/myscript.php?vars=$1

спасибо понял логику.
Автор: dacuan
Дата сообщения: 10.03.2010 16:13
bazzjr

Цитата:
Есть части сайта, где работа происходит посредством ajax и адресной строки(GET), и хотелось бы чтобы пользователь совсем ничего не видел бы в адресной строке, ну или видел то, что ему покажет админ.

Не совсем понял. AJAX-запросы в адресной строке никак не светятся.

russko

Цитата:
и никак это правило работать не хочет! Если вместо %{REMOTE_USER} явно указать ник alf то откроется страница, но без строки: "year=2010&month=03" в урле...
Подскажите как правильно написать правило чтобы решить задачку, описанную в начале?

все, что после знака "?" обрабатывается с помощью

Код: RewriteCond %{QUERY_STRING} <regex>
Автор: bazzjr
Дата сообщения: 11.03.2010 08:54
dacuan ну а все-таки не могли бы вы показать парочку примеров?или хотя бы рассказать логику работы?
Автор: Tutankhamon86
Дата сообщения: 11.03.2010 15:35
Пожалуйста подскажите как сделать редирект только главного домена на другой хост а все поддомены отставить не тронутыми?
Автор: dacuan
Дата сообщения: 11.03.2010 15:46
Tutankhamon86
Используя RewriteCond

Код: RewriteCond %{HTTP_HOST} main.example.com
RewriteRule ^.*$ http://other.example.net [NS,L,R]
Автор: bazzjr
Дата сообщения: 11.03.2010 17:57
dacuan

Вопрос следующий:

Если пользователь ввел в адресную строку адрес вида - http://site.ru/?a=1&b=2
То есть ли возможность перенаправить его на страницу http://site.ru/search/?a=1&b=2 но при этом в адресной строке скрыть адрес http://site.ru/search/?a=1&b=2, а отобразить например http://site.ru/search/
Автор: dacuan
Дата сообщения: 12.03.2010 09:37
bazzjr
Можете поиграть с флагом [E=], но у меня с полпинка он не заработал. Если не получится, то запрос
http://site.ru/?a=1&b=2
может обрабатываться скриптом вида

Код: <?php
session_start();
$_SESSION["QS"] = $_SERVER["QUERY_STRING"];
header("Location: /search/");
Автор: Tutankhamon86
Дата сообщения: 12.03.2010 10:36
dacuan

Цитата:
Используя RewriteCond

Спасибо
Автор: MeatNyx
Дата сообщения: 30.03.2010 05:56
Здравствуйте. Уже третий день парюсь, ничего не могу поделать.
Делаю ЧПУ с помощью mod_rewrite.
Мне нужно, чтобы ссылки site.ru/ru/page ссылались на index.php?lang=ru&page=page
При отсутствии последней переменной пусть посылается только одна.

.htaccess:

DirectoryIndex /ru/

RewriteEngine On
RewriteBase /

RewriteRule ^([A-Za-z]+)/?$ index.php?lang=$1 [L]
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)/?$ index.php?lang=$1&page=$2 [L]

все хорошо, переменные присылаются, но также подменяются и папки, тоесть при запросе site.ru/ru/about/

мы какбы находимся в папке ru/about.
Со всеми вытекающими: не находит страницы и стили.
Заранее благодарен)
Автор: Cheery
Дата сообщения: 30.03.2010 06:02
MeatNyx

Цитата:
мы какбы находимся в папке ru/about.
Со всеми вытекающими: не находит страницы и стили

ну так прописывайте пути к стилям от корня сайта
Автор: droZel
Дата сообщения: 30.03.2010 06:06
пути к стилям прописаны:     
<link rel="stylesheet" href="../mystyle.css" type="text/css" />

и еще site.ru/ru превращается прям в строке в http://site.ru/ru/?lang=ru

Разве суть реврайта не в том, что он преоразует эти папки в переменные? Почему папки как таковые остаются? Я не понимаю суть, или я неправильно прописал реврайт?

(это я meatnyx, буду писать под этим профилем)
Автор: SKi
Дата сообщения: 07.04.2010 23:23
Здравствуйте.
Помогите отучить mod_rewrite ползать по папкам.

.htaccess

Код:
RewriteEngine On
RewriteBase /
RewriteRule ^(\w+)/(\d+)/$ index.shtml?mod=$1&id=$2 [L]
Автор: dacuan
Дата сообщения: 08.04.2010 15:43
SKi
Это его нормальное поведение. mod_rewrite пытается обработать все запросы к апачу включая картинки, css и прочее.
Автор: SKi
Дата сообщения: 09.04.2010 00:48
Спасибо за ответ.
Поборол так:

Код:
RewriteEngine On
RewriteOptions Inherit
RewriteBase /
RewriteCond %{REQUEST_URI} !^favicon.ico
RewriteCond %{REQUEST_URI} !^img/.*
RewriteCond %{REQUEST_URI} !^images/.*
RewriteCond %{REQUEST_URI} !^css/.*
RewriteCond %{REQUEST_URI} !^js/.*
RewriteCond %{REQUEST_URI} !^cgi-bin/.*
RewriteRule ^([a-z]+)/([0-9]+)/?$ /index.shtml?mod=$1&id=$2 [NS]
Автор: OLEX
Дата сообщения: 20.04.2010 02:50
Драсьте.

Есть сайт, к примеру site.ru на котором в .htaccess есть куча правил.
Создан поддомен, sub.site.ru , который физически находится в папке sub , которая лежит в корне site.ru , и все запросы к sub.site.ru обрабатываются правилами из site.ru .
Как от этого избавиться?
Автор: Cheery
Дата сообщения: 20.04.2010 03:00
OLEX
добавить
RewriteCond %{HTTP_HOST} ^site\.ru$
Автор: OLEX
Дата сообщения: 20.04.2010 03:10
ммм... все равно обрабатывется..

вот это
RewriteCond %{HTTP_HOST} ^site\.ru$
нужно прописывать перед каждым RewriteRule ?

Добавлено:
у меня изначально ни одного RewriteCond не было
Автор: Cheery
Дата сообщения: 20.04.2010 03:19
OLEX

Цитата:
нужно прописывать перед каждым RewriteRule ?

да
Автор: OLEX
Дата сообщения: 20.04.2010 03:22
Cheery
да уже понял, прописал перед основными директивами, заработало, большое спасибище!
Автор: Qwezar
Дата сообщения: 21.05.2010 09:21
Сори если был такой вопрос.

Как сделать, чтобы mod_rewrite отличал физический файл от преобразованного? Структура файла .htaccess следующая:

Код:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mysite.ru
RewriteRule (.*) http://www.mysite.ru/$1 [R=301,L]
RewriteRule ^(.*).html$ index.php?id=$1
Автор: dacuan
Дата сообщения: 21.05.2010 09:36
Qwezar

Цитата:
Как сделать, чтобы mod_rewrite отличал физический файл от преобразованного? Структура файла .htaccess следующая:

Используй флаги -f для файла и -d для каталога

Код: RewriteEngine on
RewriteCond %{HTTP_HOST} ^mysite.ru
RewriteRule (.*) http://www.mysite.ru/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*).html$ index.php?id=$1
Автор: Qwezar
Дата сообщения: 21.05.2010 10:33
dacuan

Спасибо! =)
Автор: Shader
Дата сообщения: 23.05.2010 10:36
Попробовал написать антилич для папки с контентом галереи Imagevue.


Код: RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://www.yourdomain.com [NC]
RewriteRule .*\.(jpg|jpeg|gif|mp3|png|bmp|xml)$ - [NC,F]
Автор: Tstf
Дата сообщения: 10.06.2010 12:57
Вопрос по ЧПУ.

Русские фразы в ЧПУ. Т.е. я вбиваю в ссылку слово "тел"

т.е. ссылка вида

http://localhost/denis/catalogue/search/1/1/norm/offer/~search=тел

А когда идет запрос, то получаю "тел"

Как поправить?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

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


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