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

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

Автор: Laterport
Дата сообщения: 12.04.2012 08:06
dacuan
Уважаемый!
Вот решил поделиться тем, что человек мне ответил на другом ресурсе по поводу моего второго вопроса. Я именно это имел в виду. Думаю вы просто не поняли мой вопрос, а я возможно в свою очередь не корректно его задал.



Цитата:

Через внешний редирект, поэтому как можно выше.


Код:
RewriteCond %{THE_REQUEST} \.(?:php|html?)[\?\ ]
RewriteRule ^/?(.+)\.(?:php|html?)$ http://%{HTTP_HOST}/$1 [R,L]


Это лишняя нагрузка. Можно без RewriteCond, но с флагами END на правилах выше (только последние версии апача).
Автор: Cheery
Дата сообщения: 12.04.2012 08:14
Laterport

Цитата:
Вот решил поделиться тем, что человек мне ответил на другом ресурсе по поводу моего второго вопроса.


ну вы хотите, чтобы у вас все ссылки были с .php, и при каждом запросе делать редирект на адрес без расширения, да еще и 302?

подобные вещи надо на крайний случай делать.
я в своем движке реализовал работу без расширений, но у меня помимо переадресации ссылки с расширением на ссылку без нее (при этом я сделал и проверку существования файла), движок загоняет в буфер html код страницы, а потом обрабатывает его корректируя ссылки.

кстати, у вас возникнет в этой ситуации проблема с POST данными - они просто потеряются при переадресации.
Автор: Laterport
Дата сообщения: 12.04.2012 08:32
Cheery
Тогда уберём.

Добавлено:
Ну в принципе же, проект у меня только на стартовом этапе, пока маленькая база, мало файлов. Может и мне реализовать работу без расширений? Знать бы только как это сделать корректно и не в ущерб чему-либо...
Автор: Laterport
Дата сообщения: 15.04.2012 08:04
Подскажите пожалуйста директиву редиректа только для тех IP, которые запрещены правилом deny IP. Error 403 не подходит.
Автор: Cheery
Дата сообщения: 15.04.2012 08:08
Laterport

Цитата:
директиву редиректа только для тех IP, которые запрещены правилом deny IP

вопросы по директивам апача в другом разделе (да и нет такой)
mod_rewrite же тут не при чем, так как работает на другом уровне.
либо "имитируйте" осуществляя проверку с помощью mod_rewrite
Автор: Laterport
Дата сообщения: 15.04.2012 08:12
Cheery
Приветствую. Хорошо, с помощью mod_rewrite возможно такое осуществить? Просто если у меня забанен на сайте IP диапазон определённой страны, я хочу чтобы они перенаправлялись на страницу 1.html, а забаненые по другой причине, на 2.html и т.д.
Автор: Cheery
Дата сообщения: 15.04.2012 08:20
Laterport

Цитата:
IP диапазон

слишком муторно это делать через mod_rewrite
http://www.webmasterworld.com/forum92/4938.htm
хотя.. через RewriteMap (но там список IP, можно что то придумать, но стоит ли)
http://objectmix.com/apache/673610-block-ip-range-mod_rewrite.html
Автор: Laterport
Дата сообщения: 15.04.2012 08:33
Cheery
Ok, спасибо.
Автор: Laterport
Дата сообщения: 22.04.2012 11:33
Скажите пожалуйста, является ли такой редирект на https нормальным или есть более лучший способ?


Код:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Автор: Laterport
Дата сообщения: 25.04.2012 06:38
Как сделать чтобы при таком коде


Код:
RewriteRule ^PRIMER$ browse.php [L]
Автор: Cheery
Дата сообщения: 25.04.2012 06:44
Laterport

Цитата:
есть более лучший способ?

в чем он может быть лучше?


Цитата:
в адресной строке отображалось именно PRIMER.

а у вас что отображается?
Автор: Laterport
Дата сообщения: 25.04.2012 08:13
Cheery
Выразился не верно. Имел в виду правильный ли способ редиректа или несёт за собой что-то не очень хорошее.
По поводу второго вопроса. Если руками в браузере забиваешь http://site.ru/primer то отображается именно так. Если откуда-нибудь переходишь по ссылке http://site.ru/primer то отображается http://site.ru/browse.php
Автор: Cheery
Дата сообщения: 25.04.2012 08:17

Цитата:
Если руками в браузере забиваешь http://site.ru/primer то отображается именно так. Если откуда-нибудь переходишь по ссылке http://site.ru/primer то отображается http://site.ru/browse.php

по приведенному куску такого быть не должно - ему все равно как вы попадаете на /primer - набирая адрес руками или по ссылке, так что дело в чем то другом.
Автор: Laterport
Дата сообщения: 25.04.2012 08:47
Посмотрите пожалуйста в чём может быть дело:


Код:
AddDefaultCharset UTF-8
Options All -Indexes
AddType "text/html; charset=UTF-8" .html .htm .shtml

RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml

###########MOD_REWRITE###################

RewriteEngine On
RewriteRule ^primer$ browse.php [L]

RewriteCond %{HTTPS} =off
RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

RewriteCond %{REQUEST_FILENAME}.htm -f
RewriteRule ^(.*)$ $0.htm [NS,L]

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $0.html [NS,L]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $0.php [NS,L]

ErrorDocument 500 http://site.ru/error500
RewriteRule ^(error500.*) error500.html

#######################################
Автор: Sutar
Дата сообщения: 25.04.2012 14:21
Помогите преобразовать URL с
http://site/index?page=2&ts=0
в
http://site/page=2&ts=0
или в
http://site/page/2/ts/0
Автор: dacuan
Дата сообщения: 25.04.2012 15:01
Sutar

Код: RewriteRule ^page/([0-9]+)/ts/([0-9]+)$ index?page=$1&ts=$2 [NS,L]
Автор: Sutar
Дата сообщения: 25.04.2012 18:19
dacuan
У меня всёвремя пишет "Internal Server Error"
Автор: Cheery
Дата сообщения: 25.04.2012 18:21
Sutar

Цитата:
У меня всёвремя пишет "Internal Server Error"

смотрите лог ошибок сервера.
Может у вас запрещено вообще использовать правила, ну или в них ошибка.
Автор: Sutar
Дата сообщения: 25.04.2012 18:24
Cheery
Лого:


Код: [Wed Apr 25 18:23:39 2012] [alert] [client **.**.**.**] D:/**/www/.htaccess: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
Автор: Cheery
Дата сообщения: 25.04.2012 18:27
Sutar
вот вам и ответ
У вас не подключен модуль mod_rewrite в конфигурации сервера

Цитата:
LoadModule rewrite_module modules/mod_rewrite.so
Автор: Sutar
Дата сообщения: 25.04.2012 18:38
Cheery
Где его подключить? в каком файле?
Автор: Cheery
Дата сообщения: 25.04.2012 18:40
Sutar

Цитата:
Где его подключить? в каком файле?

ищите httpd.conf
если у вас какая то сборка с Apache в комплекте, то может и называться иначе
Автор: Sutar
Дата сообщения: 25.04.2012 18:48
Cheery
Спасибо большое, всё круто работает))
вот проблемка...
а можно как-то проверять URL?
вот вы мне писали проверку, а теперь она не работает...
можете её доработать?

к примеру, доступный URL:
http://site/page=19
а если например сделать так:
http://site/pag1e=19
пишет что не найдена страница... можно сделать, чтоб кидало на главную?
Автор: Cheery
Дата сообщения: 25.04.2012 18:51
Sutar


Цитата:
можете её доработать?

я же сказал, знаков = в URL быть не может, только в аргументах запроса. ваш браузер их перекодирует в URL кодировку


Цитата:
можно сделать, чтоб кидало на главную?

вам тогда ВСЕ кидать надо на главную (вернее на index.php) и уже в нем смотреть с чем пришли.
Автор: Sutar
Дата сообщения: 25.04.2012 18:54
Cheery
ммм... столько проверок сделано, и не работают...

поможете проверки сделать? давайте сюда, чтоб не флудить в этой теме.
Автор: Cheery
Дата сообщения: 25.04.2012 18:57
Sutar
зачем?

1) не нужно перебрасывать даже неправильные запросы на основную страницу. это плохо для поисковиков + увеличивает нагрузку на сервер

2) для переброса всех запросов нужно использовать mod_rewrite, но нужно правильно его написать, чтобы не кидать запросы к картинкам, css и другим статическим файлам

3) можете воспользоваться этим, чтобы создавать свои страницы ошибок Apache: .htaccess и страницы ошибок (404.html и др.)

отсюда вывод - зачем вы все усложняете?
Автор: Sutar
Дата сообщения: 25.04.2012 19:00
Cheery
Просто хочу чтоб всё было корректно)
Мне нужно:
Если если приставка index, index.php, ?, перед page= переходило на страницу без тех приставок.
Если вид page= - переносило на главную страницу.
Если в page= есть ещё приставки, тоесть к примеру page=1&sss=2 - переносило на главную страницу.

такое возможно сделать?
Автор: Laterport
Дата сообщения: 26.04.2012 06:06
Cheery
http://forum.ru-board.com/topic.cgi?forum=31&topic=8134&start=960#17

Глянь пожалуйста, в чём может быть дело?
По поводу того что при переходе по ссылке реврайт не корректно отрабатывает.
Может тут опять причина в параллельном nginx? )
Автор: Cheery
Дата сообщения: 26.04.2012 06:30
Laterport

Цитата:
Может тут опять причина в параллельном nginx? )

может быть. я не вижу там ничего, чтобы реагировало на наличие реферера (а только им и определяется разница, либо вы что то не договариваете)
Автор: Laterport
Дата сообщения: 26.04.2012 11:17
Да нет, я всё показал что в конфиге...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

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


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