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

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

Автор: Zakkazak
Дата сообщения: 26.01.2009 00:51
Прошу прощения если вопрос не относиться к этой ветке, модер сюды отсылает подобные вопросы:
Надо преобразовывать урл из Википедии в читабельный вид, например
из
http://ru.wikipedia.org/wiki/%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA
в
http://ru.wikipedia.org/wiki/Скриптовый_язык

Нужна таблица которую собираюсь вскормить Offline Explorer
Автор: Cheery
Дата сообщения: 26.01.2009 01:17
Zakkazak

Цитата:
Нужна таблица которую собираюсь вскормить Offline Explorer

таблица чего?

Цитата:
модер сюды отсылает подобные вопросы

и где и куда вас посылал?


просто не пойму при чем тут mod_rewrite?
то, что по первой ссылке, как раз правильно url encoded.
вот вам таблица..
http://urlencode.it/url/characters/
хотите с русскими символами? ок
набейте такой код в странице с русской кодировкой

Код: for (var i=0; i<256;i++)
document.write(i+":"+String.fromCharCode(i)+'='+escape(String.fromCharCode(i))+"<br>")
Автор: Zakkazak
Дата сообщения: 26.01.2009 13:10
Cheery
По этой ссылке забрел сюда как сделать url аналогичный википедии?..
Спрошу в другом месте
Автор: Cheery
Дата сообщения: 26.01.2009 16:06
Zakkazak
я просто не совсем понимаю в чем проблема то? что там, что тут..
Автор: Zakkazak
Дата сообщения: 26.01.2009 17:05
Вопрос не совсем по програмированию:
Offline Explorer при закачке может автоматически сохранять страницы с другим именем. Ему просто надо указать какие символы менять чем. Таблиц сотворил в ручную вбил эти адреса в строку и браузер возвратил мне их эквиваленты
http://ru.wikipedia.org/wiki/А_БВГДЕЁЖХИЙКЛМНОПРСТУХФЦЧШЩЪЫЬЭЮЯ
http://ru.wikipedia.org/wiki/а_бвгдеёжхийклмнопрстухфцчшщъыьэюя
[more]
%D0%90    А    %D0%B0    а
%D0%91    Б    %D0%B1    б
%D0%92    В    %D0%B2    в
%D0%93    Г    %D0%B3    г
%D0%94    Д    %D0%B4    д
%D0%95    Е    %D0%B5    е
%D0%81    Ё    %D1%91    ё
%D0%96    Ж    %D0%B6    ж
%D0%97    З    %D0%B7    з
%D0%98    И    %D0%B8    и
%D0%99    Й    %D0%B9    й
%D0%9A    К    %D0%BA    к
%D0%9B    Л    %D0%BB    л
%D0%9C    М    %D0%BC    м
%D0%9D    Н    %D0%BD    н
%D0%9E    О    %D0%BE    о
%D0%9F    П    %D0%BF    п
%D0%A0    Р    %D1%80    р
%D0%A1    С    %D1%81    с
%D0%A2    Т    %D1%82    т
%D0%A3    У    %D1%83    у
%D0%A5    Х    %D1%85    х
%D0%A4    Ф    %D1%84    ф
%D0%A6    Ц    %D1%86    ц
%D0%A7    Ч    %D1%87    ч
%D0%A8    Ш    %D1%88    ш
%D0%A9    Щ    %D1%89    щ
%D0%AA    Ъ    %D1%8A    ъ
%D0%AB    Ы    %D1%8B    ы
%D0%AC    Ь    %D1%8C    ь
%D0%AD    Э    %D1%8D    э
%D0%AE    Ю    %D1%8E    ю
%D0%AF    Я    %D1%8F    я
[/more]
Автор: wyxa
Дата сообщения: 28.01.2009 05:15
Ребят, помогите справиться с проблемой.
Есть ссылки вида
http://www.site1.com/index.php?a=param1&b=param2

Нужно чтобы перебрасывало на
http://www.site2.com/index.php?l=ru&a=param1&b=param2

Я создал .htaccess и закинул его в корневую папку site1.com:
Код: RewriteEngine on
RewriteRule ^index.php?(.*)$ http://www.site2.com/index.php?l=ru&$1 [R=301]
Автор: Cheery
Дата сообщения: 28.01.2009 05:20
wyxa
что вам мешает перебрасывать тем же index.php??

mod_rewrite в таком виде не работает с query string
хотите полностью перенести - смотрите на флаг QSA (query string append)
Автор: wyxa
Дата сообщения: 28.01.2009 05:32
Cheery

Цитата:
что вам мешает перебрасывать тем же index.php??

Дело в том, что таких «index.php» много, и каждый править лень.

Цитата:
хотите полностью перенести - смотрите на флаг QSA (query string append)

А вот это помогло! Спасибо!
Решение такое:
RewriteRule ^index.php$ http://www.site2.com/index.php?l=ru [QSA,R=301]
Автор: Cheery
Дата сообщения: 28.01.2009 05:47
farik7

Цитата:
не срабатывает по идее из-за знака вопоса, его в этом месте нужно экранировать? и как?

нужно делать RewriteCond на %{QUERY_STRING}
Автор: wyxa
Дата сообщения: 28.01.2009 06:32
Я сделал перенаправление 301 с одного сайта на другой. Но проблема в том, что параметры в адресах страниц одного сайта в некоторых случаях различаются.

Можно ли сделать, чтобы перенаправление осуществлялось по списку

Нап
www.site1.com/index.php?a=1&b=2&c=3
меняется на
www.site2.com/index.php?a=4&b=2&c=22
с перенаправлением 301.

Общего правила нет, просто я задаю точный список замен. Можно ли это сделать при помощи mod_rewrite? Предполагаю, что надо использовать %{QUERY_STRING}. Подскажите, как это сделать.

Проблема связана с поисковой системой. Она проиндексировала страницу со старыми параметрами, а сейчас параметры уже изменились. И при поиске находятся страницы с неверными параметрами, соотвественно отображается каша. Страниц таких немного совсем.
Конечно, для правильного отображения можно исправить сам index.php.
Однако, мне нужно, чтобы адрес с неверными параметрами исчез из результатов поиска (заменился на новый). Насколько я знаю, для этого нужно проставить перенаправление с кодом 301.

Добавлено:
Вроде как можено и без mod_rewrite обойтись, тогда прошу прощения за офф-топ.
Решение — правим php-файл и при определённых условиях вставляем:
Код: <?
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://www.new-url.com" );
?>
Автор: Cheery
Дата сообщения: 28.01.2009 19:43
wyxa

Цитата:
Общего правила нет, просто я задаю точный список замен. Можно ли это сделать при помощи mod_rewrite? Предполагаю, что надо использовать %{QUERY_STRING}. Подскажите, как это сделать

можно, но не проще ли в index.php??
ок.. как и сказал выше - используйте RewriteCond на %{QUERY_STRING}

Автор: federikkoII
Дата сообщения: 04.03.2009 15:00
Нужна помощь, второй день голову ломаю Не могу RewriteRule написать..

надо из ссылки вида - http://test.ru/foto/off.png

сделать http://test.ru/debag.php?id=http://test.ru/foto/off.png
Автор: Cheery
Дата сообщения: 04.03.2009 18:57
federikkoII

Цитата:
Нужна помощь, второй день голову ломаю

до кучи же примеров выше похожих.

для одной только ссылки или для всех?
Автор: federikkoII
Дата сообщения: 05.03.2009 01:36
Для всех ссылок реврайт на http://test.ru/debag.php?id=(полный путь до файла)

RewriteRule ^(.*) http://www.test.ru/counter.php?id=$1&% так в ID вытаскивается имя файла

RewriteRule ^(.*) http://www.test.ru/counter.php?id=$1&%{QUERY_STRING} [L] и так имя файла что я не так делаю :-[


Перелопатил всё, ничего не получается, максимум имя файла могу вытащить, а надо полный путь до файла Помогите, ткните в нужное место третьи сутки эксперементирую
Автор: Cheery
Дата сообщения: 05.03.2009 03:19
federikkoII

Цитата:
а надо полный путь до файла

что значит "полный путь"? в обработке вот так его нет
комибинируйте из доступных переменных
%{HTTP_HOST} %{SERVER_PORT} + %{REQUEST_URI}
Автор: federikkoII
Дата сообщения: 05.03.2009 14:18
Cheery - спасибо, разобрался, что то тупил вчера
Автор: usertum
Дата сообщения: 21.03.2009 21:40
Подскажите пожалуйста, как использовать имя каталога в чпу.

Пример:
RewriteRule ^reg/reg.html$ http://127.0.0.1/index.php?reg=reg [L]

После данного запроса на сайте все запросы на картинки скрипты итд идут на каталог reg/images итд, другими словами http://127.0.0.1/index.php?reg=reg преобразуется в http://127.0.0.1/reg/index.php?reg=reg соответственно путь становится не верным, пропадает графика, таблицы стилей css итд. Если использовать ЧПУ RewriteRule ^reg.html$ http://127.0.0.1/index.php?reg=reg то все отлично. Как указывать каталог в чпу, что бы получить http://127.0.0.1/reg/reg.html ?
Автор: Cheery
Дата сообщения: 21.03.2009 21:44
usertum
перед этим написать
RewriteBase /reg
и потом

Цитата:
RewriteRule ^reg.html$ http://127.0.0.1/index.php?reg=reg



либо, все же, писать так
RewriteRule ^/reg/reg.html$
Автор: usertum
Дата сообщения: 21.03.2009 21:48

Цитата:
RewriteRule ^/reg/reg.html$
я так писал, тогда все пути меняются на /reg/ у скриптов, картинок итд.

А если прописать так, RewriteBase /reg а каталогов будет несколько?

Добавлено:
Пример, путь http://127.0.0.1/reg/up/avatar стало, а должно быть http://127.0.0.1/up/avatar...

RewriteBase /reg - не помогло.
Автор: Cheery
Дата сообщения: 21.03.2009 21:51
usertum

Цитата:
А если прописать так, RewriteBase /reg а каталогов будет несколько?

переписывать перед каждым условием..

Цитата:
The RewriteBase directive explicitly sets the base URL for per-directory rewrites. As you will see below, RewriteRule can be used in per-directory config files (.htaccess). In such a case, it will act locally, stripping the local directory prefix before processing, and applying rewrite rules only to the remainder. When processing is complete, the prefix is automatically added back to the path. The default setting is; RewriteBase physical-directory-path

но в целом должно работать и без..
включите на время логирование обработки правил и посмотрите



Цитата:
я так писал, тогда все пути меняются на /reg/ у скриптов, картинок итд.

не верится что то.. значит написали что то не так.

включите логирование и приведите лог
Автор: usertum
Дата сообщения: 21.03.2009 22:06
В форум лог не вставился, http://rapidshare.com/files/211898912/log.rar.html
MD5: 09D0CFBE7DB7A3764F481FD16EB90165 вот. Там пример на cms, но в моих скриптах аналогично отрабатывает. Просто в cms больше графики и все наглядно видно.

Добавлено:
Все выводится как нужно, ЧПУ работает. Но все пути меняются на каталог указанный в ЧПУ. Я почему и попросил помощи, указываю вро-ди все верно, аналогично как и вы мне сказали было ранее указанно.

Добавлено:
RewriteEngine On
RewriteBase /reg
RewriteRule ^reg/reg.html$ http://127.0.0.1/index.php?reg=reg [L]
Автор: Cheery
Дата сообщения: 21.03.2009 22:15
usertum
я не вижу срабатываний в логе.. вы уверены, что именно так и происходит?

Цитата:
127.0.0.1 - - [22/Mar/2009:00:00:40 +0500] [127.0.0.1/sid#93bd30][rid#1ef6318/initial/redir#1] (3) [per-dir C:/Program Files/VertrigoServ/www/] strip per-dir prefix: C:/Program Files/VertrigoServ/www/index.php -> index.php
127.0.0.1 - - [22/Mar/2009:00:00:40 +0500] [127.0.0.1/sid#93bd30][rid#1ef6318/initial/redir#1] (3) [per-dir C:/Program Files/VertrigoServ/www/] applying pattern '^reg/reg.html$' to uri 'index.php'
127.0.0.1 - - [22/Mar/2009:00:00:40 +0500] [127.0.0.1/sid#93bd30][rid#1ef6318/initial/redir#1] (3) [per-dir C:/Program Files/VertrigoServ/www/] strip per-dir prefix: C:/Program Files/VertrigoServ/www/index.php -> index.php
127.0.0.1 - - [22/Mar/2009:00:00:40 +0500] [127.0.0.1/sid#93bd30][rid#1ef6318/initial/redir#1] (3) [per-dir C:/Program Files/VertrigoServ/www/] applying pattern '^index.html' to uri 'index.php'
127.0.0.1 - - [22/Mar/2009:00:00:40 +0500] [127.0.0.1/sid#93bd30][rid#1ef6318/initial/redir#1] (1) [per-dir C:/Program Files/VertrigoServ/www/] pass through C:/Program Files/VertrigoServ/www/index.php

не сработало.


Цитата:
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (3) [per-dir C:/Program Files/VertrigoServ/www/] add path info postfix: C:/Program Files/VertrigoServ/www/jabber -> C:/Program Files/VertrigoServ/www/jabber/images/logos/logo_web_2_2.gif
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (3) [per-dir C:/Program Files/VertrigoServ/www/] strip per-dir prefix: C:/Program Files/VertrigoServ/www/jabber/images/logos/logo_web_2_2.gif -> jabber/images/logos/logo_web_2_2.gif
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (3) [per-dir C:/Program Files/VertrigoServ/www/] applying pattern '^reg/reg.html$' to uri 'jabber/images/logos/logo_web_2_2.gif'
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (3) [per-dir C:/Program Files/VertrigoServ/www/] add path info postfix: C:/Program Files/VertrigoServ/www/jabber -> C:/Program Files/VertrigoServ/www/jabber/images/logos/logo_web_2_2.gif
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (3) [per-dir C:/Program Files/VertrigoServ/www/] strip per-dir prefix: C:/Program Files/VertrigoServ/www/jabber/images/logos/logo_web_2_2.gif -> jabber/images/logos/logo_web_2_2.gif
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (3) [per-dir C:/Program Files/VertrigoServ/www/] applying pattern '^index.html' to uri 'jabber/images/logos/logo_web_2_2.gif'
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (1) [per-dir C:/Program Files/VertrigoServ/www/] pass through C:/Program Files/VertrigoServ/www/jabber

аналогично.
покажите где срабатывает
Автор: usertum
Дата сообщения: 21.03.2009 22:20
[delete]
Автор: Cheery
Дата сообщения: 21.03.2009 22:35
usertum

Цитата:
Уберите пожалуйста лог с форума, если вам не трудно.

чем он вам мешает?? если то, что сами выложили - нажмите кнопку редактировать у своего поста

Цитата:
если писать правило, то срабатывает. А если добавить каталог то нет, выше примеры с готовой CMS

я не пойму что вам не нравится то..
если добавить каталог, то срабатывать будет только в нем.
не путайте меня.. вы утверждали, что если написать с каталогом, то все пути преобразуются
я же не вижу в логах подобных преобразований
Автор: usertum
Дата сообщения: 21.03.2009 22:38
Да все пути преобразуются.

Нет я про ваш лог говорю, не хочу что бы он был в общем доступе.

Вот пример, C:/Program Files/VertrigoServ/www/jabber/images/logos/logo_web_2_2.gif -> jabber/images/logos/logo_web_2_2.gif Не верный запрос, C:/Program Files/VertrigoServ/www/images/logos/logo_web_2_2.gif -> /images/logos/logo_web_2_2.gif Должно быть.

Я в ЧПУ прописал каталог jabber в данном случаи, и все запросы пошли на него.
Автор: Cheery
Дата сообщения: 21.03.2009 22:48
usertum

Цитата:
Вот пример, C:/Program Files/VertrigoServ/www/jabber/images/logos/logo_web_2_2.gif -> jabber/images/logos/logo_web_2_2.gif Не верный запрос

но он не имеет никакого отношения к тому правилу, что вы привели



Цитата:
Нет я про ваш лог говорю.

какая разница то есть он или нет? ничего секретного он не открывает
а за порчу пред. постов можно и предупреждение схлопотать



Цитата:
Я в ЧПУ прописал каталог jabber в данном случаи, и все запросы пошли на него.

ну, идут.. как первоначальный запрос браузера выглядит ? (URL картинки logo_web_2_2.gif к которой обращается браузер)
Автор: usertum
Дата сообщения: 21.03.2009 22:55
Это тест на cms "Antislaedcms",
Было прописано правило RewriteRule ^jabber/create.html$ http://127.0.0.1/index.php?name=Jabber [L]

И все запросы пошли на /jabber/

какая разница то есть он или нет? ничего секретного он не открывает - он открывает пути, часть структуры скрипта. Зачем он шас тут?

Добавлено:
А каталога jabber нет, и путей таких тоже нет. Я не хочу все преобразовать на данный каталог!
Автор: Cheery
Дата сообщения: 21.03.2009 22:58
usertum

Цитата:
ничего секретного он не открывает - он открывает пути, часть структуры скрипта. Зачем он шас тут?

не смешите..


Цитата:
И все запросы пошли на /jabber/

еще раз.. как в html выглядит путь к картинке

Цитата:
logo_web_2_2.gif




Цитата:
А каталога jabber нет, и путей таких тоже нет. Я не хочу все преобразовать на данный каталог!

вот с этого и надо все начинать.. читайте посты в теме ранее - браузер не знает всех ваших внутренних преобразований
либо преобразуете так и все пути, либо указываете пути к картинкам правильные.. без jabber

поэтому и спросил - как выглядят пути к картинкам в сгенерированной странице.
Автор: usertum
Дата сообщения: 21.03.2009 23:03
Выглядит так: http://127.0.0.1/images/logos/logo_web_2_2.gif
Автор: Cheery
Дата сообщения: 21.03.2009 23:16
usertum

Цитата:
Выглядит так

если честно, то не верю..

Цитата:
127.0.0.1 - - [22/Mar/2009:00:00:42 +0500] [127.0.0.1/sid#93bd30][rid#1fbe4f0/initial] (3) [per-dir C:/Program Files/VertrigoServ/www/] add path info postfix: C:/Program Files/VertrigoServ/www/jabber -> C:/Program Files/VertrigoServ/www/jabber/images/logos/logo_web_2_2.gif

говорит как раз о том, что в картинках путь идет либо как
/jabber/images....
либо проблема из за того, что указываете переброс как http://127.0.0.1, то есть в корневую директорию того же сервера и происходит наложение путей.

так нужно? чем хуже вот так?
RewriteRule ^jabber/create.html$ /index.php?name=Jabber [L]

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

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


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