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

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

Автор: Cheery
Дата сообщения: 24.10.2012 01:26
DJ_Scorp

Цитата:
в скрипте принимаю как обычно через $_GET['r']

смотрите выше.. процитировал результат из phpinfo
Автор: DJ_Scorp
Дата сообщения: 24.10.2012 01:49
Да, точно работает, сделал как Вы, но смотрите какая штука, даже не знаю почему так...

создал на локалке под денвером как обычно папку с адресом сайта в ней папку www и там создал вот файл test.php с содержимым <?php echo $_GET['r']; ?>, вставил правило в .htaccess которое Вы дали последнее в итоге при переходе по адресу вида http://site.ru/test?000 почему-то ошибка 404

перекинул это всё в папку локалхост, там всё работает как положено...

Странно, в чём причина, всё остальное ведь работает из папки сайта, а это правило не хочет...
Автор: Cheery
Дата сообщения: 24.10.2012 01:51
DJ_Scorp

Цитата:
почему-то ошибка 404

потому что переадресация, если посмотрите, начинается от корня сайта, то есть с /
Автор: DJ_Scorp
Дата сообщения: 24.10.2012 01:57
Ну и ладно, правильно же, оно и должно всё срабатывать, я же открываю адрес как бы он в интернете... что-то всё равно не пойму... Я ещё очень слабо разбираюсь во всех этих тонкостях, но с такой ситуацией сталкиваюсь впервые... обычно у меня всё работает на локалке без проблем...

Добавлено:
Так, стоп... это я дурачок умудрился адрес перепутать самого сайта... Извините меня, пожалуйста.

Всё работает! Остался только один момент ещё...

Когда человек заходит по адресу такого вида http://site.ru/prez?one
он должен попадать на адрес такого вида: http://site.ru/komp.php?r=one

То есть параметр указывающий на страницу и сама страница могут отличаться, то есть якобы в адресе запроса сокращённо, а указывает на полное название страницы...
Автор: Cheery
Дата сообщения: 24.10.2012 02:06
DJ_Scorp

Цитата:
То есть параметр указывающий на страницу и сама страница могут отличаться, то есть якобы в адресе запроса сокращённо, а указывает на полное название страницы...

либо перечисляете все способы в htaccess, создавая отдельные правила
либо перекидываете на php файл, который определяет что вам нужно и перебрасывает туда или делает внутренний запрос

в принципе в mod_rewrite есть маппинг, но никогда им не пользовался
http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritemap
Автор: DJ_Scorp
Дата сообщения: 24.10.2012 02:24
Прописал отдельные правила для каждой странички по типу

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteCond %{QUERY_STRING} !^r=
RewriteRule ^t?$ test.php?r=%1 [L]


результат нужны даёт, но вот если без параметров, то ошибка.
То есть если так http://site.ru/t то ошибка

Подскажите, пожалуйста.
Автор: Cheery
Дата сообщения: 24.10.2012 02:26
DJ_Scorp

Цитата:
То есть если так http://site.ru/t то ошибка

а файл t.php при этом физически существует?
Автор: DJ_Scorp
Дата сообщения: 24.10.2012 02:32
Нет конечно, оно должно перенаправлять на файл test.php
Автор: Cheery
Дата сообщения: 24.10.2012 02:34
DJ_Scorp
с чего бы?? при чем тут test.php? вы написали

Цитата:
Если он заходит на адрес http://site.ru/prez или http://site.ru/prez/ (то есть без параметров) то соответственно должен попадать на http://site.ru/prez.php

я вас и спросил - файл, который с расширением .php при этом существует или нет?
при запросе /t должно запрашивать /t.php - он есть?
Автор: DJ_Scorp
Дата сообщения: 24.10.2012 02:35
Говорю ж не существует..

То есть так работает если ввести с параметром http://site.ru/t?000 то открывает правильно вот так http://site.ru/test.php?r=000

а если без параметров то должно так срабатывать, но не срабатывает
http://site.ru/t >>> http://site.ru/test.php
Автор: Cheery
Дата сообщения: 24.10.2012 02:38
DJ_Scorp

Цитата:
а если без параметров то должно так срабатывать, но не срабатывает  

блин.. я процитировал что вы написали, там не было такого.
перебрасывайте ВСЕ на test.php, если нет фактического файла и в нем уже смотрите что и как вам надо



Код: RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /test.php [L]
Автор: DJ_Scorp
Дата сообщения: 24.10.2012 02:49
)) я потом уточнял вот что..

Цитата:
То есть параметр указывающий на страницу и сама страница могут отличаться, то есть якобы в адресе запроса сокращённо, а указывает на полное название страницы...


Как все запросы? а если у меня другая страничка то будет всегда открываться этот test.php

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

короче всё работает по примеру вот этому

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteCond %{QUERY_STRING} !^r=
RewriteRule ^t?$ test.php?r=%1 [L]

нужно просто как-то дописать чтоб если нету параметров, то при заходе по адресу http://site.ru/t открывало страничку http://site.ru/test.php
а если к примеру другая страничка то так
http://site.ru/m открывало страничку http://site.ru/music.php
и тому подобное.
Автор: Cheery
Дата сообщения: 24.10.2012 02:55
DJ_Scorp

Цитата:
нужно просто как-то дописать чтоб если нету параметров, то при заходе по адресу

и как вы при этом определите, пытаетесь вы открыть что то существующее (картинка, css, js файл) или нет?
вы городите на сайте что то такое, с чем потом сами будете мучаться в случае возникновения проблемы.
самый просто вариант, это проброс всех запросов на несуществующие файлы на один файл, который уже грузит то, что вам нужно, в зависимости от запроса.
так работают все CMS и том подобное.

в вашем же варианте нужно жестко прописывать каждый вариант, что жутко неудобно

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^t$ test.php

и тд и тп
Автор: DJ_Scorp
Дата сообщения: 24.10.2012 03:03
Вот, то что и требовалось доказать, теперь работает всё правильно. Спасибо.

Дело в том что у меня там до 10 файлов всего планируется, поэтому прописать отдельно для каждого не составит труда. А вот будет другая задача, где много файлов, тогда буду думать в другом направлении, шире так сказать... )))

Я как Вы уже догадались любитель изобретать 3-х этажную писанину )))


Кстати передавать всё в один файл и там разбирать это имеется в виду через preg_match или как? и при этом потом будет перенаправлять на страничку нужную с заменой адресной строки получается или нет? Я вот именно хотел бы избежать подмены, что сейчас и удалось с Вашей помощью.
Автор: Cheery
Дата сообщения: 24.10.2012 03:05
DJ_Scorp

Цитата:
там разбирать это имеется в виду через preg_match или как?

как удобнее


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

что мешает сразу сделать include нужного скрипта?
Автор: DJ_Scorp
Дата сообщения: 24.10.2012 03:07
Хм... как-то не подумал... то есть саму страничку нужную инклудить?
Автор: Cheery
Дата сообщения: 24.10.2012 03:07
DJ_Scorp

Цитата:
то есть саму страничку нужную инклудить?

да хотя бы.. либо использовать www.php.net/virtual
Автор: DJ_Scorp
Дата сообщения: 24.10.2012 03:16
Не, наверное на данный момент этот ВИРТУАЛ это будет уже слишком мудрённо для меня )))
Пусть пока остаётся как есть, результат нужный есть и пока норма.. До остальных премудростей доберусь со временем.

Спасибо Вам огромное за помощь и за терпение!
Автор: sanb
Дата сообщения: 24.10.2012 22:11
не врублюсь куда копать
стоит wordpress а в подпапке dokuwiki (сайт.ru/wiki/главная)
при включении преобразования урлов в вики стало из онной перекидывать на вордпресс с сообщением что нет такой страницы
какой htaccess надо править и самое главное как?
Сервер: Apache/2.2.22
шаред хостинг
заранее благодарен
Автор: Cheery
Дата сообщения: 24.10.2012 22:14
sanb
WP перебрасывает на свой файл только если фактического файла или папки не существует.
а преобразование URL работает на той же основе, поэтому либо в правилах для WP нужно сделать исключение, либо в htaccess Wiki указать, что дальнейшую обработку (апач проверяет каждую родительскую папку на наличие .htaccess) проводить не надо

исключение простое
RewriteCond %{REQUEST_URI} !dokuwiki
Автор: sanb
Дата сообщения: 24.10.2012 22:28
Cheery
премного благодарен
уже разобрался, по этой инструкции сделал https://www.dokuwiki.org/ru:rewrite#apache
Автор: DJ_Scorp
Дата сообщения: 25.10.2012 21:53
Здравствуйте!
Ещё одна штука что-то не получается...

Адрес вида
http://sub.site.ru/znachenie_parametra
должен открывать следующее
http://sub.site.ru/page.php?r=znachenie_parametra

Добавлено:
и такой http://sub.site.ru/?znachenie_parametra
тоже должен открывать тоже самое
http://sub.site.ru/page.php?r=znachenie_parametra
Автор: ra1n
Дата сообщения: 28.10.2012 20:31

Цитата:
ra1n
Такой редирект настраивается в файле .htaccess
Вот пример 301 редиректа
RewriteEngine On
RewriteBase /
RewriteRule ^katalog/katalog/razdel1$ razdel1 [R=301,NC,L]
RewriteRule ^podrazdel3$ razdel3/podrazdel3 [R=301,NC,L]

Вроде всё просто, но не работает.

Содержимое .htaccess

Код: #ErrorDocument 404 /pages.php

RewriteEngine On
RewriteBase /
RewriteRule ^katalog/katalog/aksessuary$ aksessuary [R=301,NC,L]
Автор: Cheery
Дата сообщения: 28.10.2012 23:00
DJ_Scorp
я еще раз повторю - вы делаете ненужные вещи.
перекидывайте все на один файл и в нем определяйте что и как вам надо

ваши правила скоро будут просто конфликтовать


Цитата:
Адрес вида
http://sub.site.ru/znachenie_parametra
должен открывать следующее
http://sub.site.ru/page.php?r=znachenie_parametra

для начала вам нужно определить, а является ли это значение какой то страницей или папкой или нет.
если это значение просто одно какое то конкретное, то могли бы из предыдущего и сами написать
RewriteRule /znachenie_parametra$ /page.php?r=znachenie_parametra [L]
если же значение может быть другим - тогда возникают проблемы


Цитата:
и такой http://sub.site.ru/?znachenie_parametra
тоже должен открывать тоже самое
http://sub.site.ru/page.php?r=znachenie_parametra

опять же, из предыдущего, проверяете в
RewriteCond %{QUERY_STRING} znachenie_parametra
а можно и в index.php смотреть как параметр получили


ra1n

Цитата:
редирект не работает..

у вас .htaccess в корне сайта или в какой то папке?
Автор: ra1n
Дата сообщения: 29.10.2012 18:52
Cheery
В корне. Система - Амиро...
Автор: ra1n
Дата сообщения: 01.11.2012 17:56

Цитата:
у вас .htaccess в корне сайта или в какой то папке?

Оказывается modRewrite отключен в настройках хостинга.
Автор: wilhel2
Дата сообщения: 13.11.2012 09:42
Всем привет!

Прошу помощи.

Есть файл map.txt с содержимым:
catalog/detail.php?ELEMENT_ID=232809 /catalog/detail.php?ELEMENT_ID=234083
catalog/detail.php?SECTION_ID=158&ELEMENT_ID=139799 /catalog/detail.php?ELEMENT_ID=139799
и т.д

В настройках вирт.хоста прописал:
RewriteMap automap txt:/.../.../map.txt

В .htaccess:
RewriteCond ${automap:$1|NOT_FOUND} !NOT_FOUND
RewriteRule ^(.*)$ ${automap:$1} [R=301,L]

Нужно организовать 301 редирект с url1 на url2 (из файла). У меня получается, только если в первом столбце прописать что-то типа about/ и т.д, т.е. если в первом столбце нет параметров.

За ранее спасибо.
Автор: 3xclus1v3
Дата сообщения: 15.12.2012 15:18
[more] помогите пожалуйста...
напишите условие для mod_rewrite, чтобы он преобразовывал

mysite.ru/?pg=game_masters


mysite.ru/game_masters/



Вот мой .htaccess

Allow from all

RewriteEngine On
RewriteRule ^Secure-Image-(.*).jpg inc/secure-image.php [L]
RewriteRule ^Signature-(.*).jpg inc/sig/signature.php?id=$1 [L]
RewriteRule ^gallery/(.*)\.jpg [L]

ErrorDocument 403 /index/forbidden.php
ErrorDocument 404 /index/missing.php
ErrorDocument 500 /

# FILTER
RewriteCond %{REQUEST_URI} ^(/,|/;|/<|/>|/'|/`|/%2C|/%3C|/%3E|/%27|/////) [NC,OR]
RewriteCond %{HTTP_REFERER} ^(.*)(%00|%08|%09|%0A|%0B|%0C|%0D|%0E|%0F|%2C|<|>|'|%3C|%3E|%26%23|%27|%60)(.*) [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)('|-|<|>|,|/||.a|.c|.t|.d|.p|.i|.e|.j)(.*) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(localhost|loopback|127\.0\.0\.1).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*\.[A-Za-z0-9].* [NC,OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteCond %{HTTP_COOKIE} ^(.*)(<|>|'|%3C|%3E|%27)(.*) [NC]
RewriteRule ^(.*)$ index.php [F,L]
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
[/more]
Автор: mishakor
Дата сообщения: 29.01.2013 04:14
Задача. Необходимо переадресовать с поддомена poddomen.misite.ru на misite.ru/poddomen/

Использую следующий код.


Код: RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{HTTP_HOST} (www\.)?([a-z0-9\-_]+)\.misite\.ru [NC]
RewriteRule .? http://misite.ru/%2/ [NC,L,R=301]
Автор: mishakor
Дата сообщения: 01.02.2013 06:06
проблема ещё актуальна, решения так и не нашел(

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

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


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