Войти

Показать полную графическую версию : mod_rewrite etc.


Страниц : 1 2 3 4 5 6 7 8 9 [10]

Lossless.Senator
11-04-2012, 11:45
Подскажите пожалуйста.
Имею два вопроса. В данный момент в .htaccess прописано:



RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ $1.php


1. При написании адреса без "php", переход на неё осуществляется нормально и расширение не отображается в адресной строке, НО, при следующем переходе на сайте по ссылке, например сайт.ru/browse.php, расширение уже прописывается.

2. Хочу чтобы для *.html, *.htm файлов выше описанное тоже распространялось. Подскажите пожалуйста код.

Заблаговременно спасибо.

Sham
11-04-2012, 20:45
для *.html, *.htm файлов выше описанное тоже распространялось »
для каждого расширения две строки
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.+$ $0.php [L]
например сайт.ru/browse.php, расширение уже прописывается »
непонятно, что нужно

Lossless.Senator
12-04-2012, 06:49
Sham
Спасибо. По поводу второго видимо это не представляется возможным. Я предполагал что реврайт может вырезать расширения при переходе с одной ссылки на другую.

Sham
12-04-2012, 07:40
Через внешний редирект, поэтому как можно выше.
RewriteCond %{THE_REQUEST} \.(?:php|html?)[\?\ ]
RewriteRule ^/?(.+)\.(?:php|html?)$ http://%{HTTP_HOST}/$1 [R,L]
Это лишняя нагрузка. Можно без RewriteCond, но с флагами END на правилах выше (только последние версии апача).

Lossless.Senator
12-04-2012, 08:58
Sham
Большое спасибо! Это работает и выглядит хорошо. Процитирую то, что мне ответили по этому коду на другом ресурсе:


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

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

кстати, у вас возникнет в этой ситуации проблема с POST данными - они просто потеряются при переадресации.

Всё же хочется реализовать работу без расширений без особого ущерба для производительности и просто сделать это максимально корректно.

Sham
12-04-2012, 20:14
проблема с POST данными - они просто потеряются при переадресации. »
добавьте условие
RewriteCond %{REQUEST_METHOD} =GET
и в атрибутах action форм указывайте адрес в нужном/правильном виде. Если есть POST-запросы в ajax, то и там поправьте пути.

Цитировать никого не надо, в крайнем случае мануал. Точность ответа зависит только от конкретности заданного вопроса.

Lossless.Senator
22-04-2012, 19:06
Скажите пожалуйста, является ли такой редирект на https нормальным или есть более лучший способ?


RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Sham
22-04-2012, 20:17
Подмаски и жадные квантификаторы тут не нужны, и текст в условии можно просто сравнить. И флаги не помешают.
Оптимизируем.
RewriteCond %{HTTPS} =off
RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Lossless.Senator
22-04-2012, 20:36
Как всегда благодарю, Sham

Lossless.Senator
24-04-2012, 18:23
Как сделать чтобы при таком коде


RewriteRule ^PRIMER$ browse.php [L]


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

Подскажите пожалуйста код для конкретного примера и глобальный, чтобы распространялся на всё на сервере.




© OSzone.net 2001-2012