Как в .htaccess убрать расширение .php в конце строки?
Хотя здесь смотря что вам нужно.
Хотите чтобы в адресной строке можно было не указывать расширение файла?
Тоесть на сервере есть файл /login.php, а в адресной строке можно было написать /login, /login.php, /login.html и при этом всё-равно отработал файл /login.php на сервере ?
Или же если человек указал расширение в адресной строке(/login.php), сначала переадресовать его на адрес без расширения (/login), а потом чтобы отработал все тот же login.php на сервере?
mrdragon9000 @mrdragon9000
Страница: site.ru/login — загружается нормально. Но нужны редиректы на нее.
тоесть на сервере вы создали папку login и него положили index.php? По моему изначально не правильный подход, но в таком случае вам нужно это:
RewriteEngine On RewriteRule ^(.*)\.(.*)$ $1 [L,R=301]
тогда неважно какое расширение будет указано, скрипт всегда будет переадресовываться на адрес без расширения. Или
RewriteEngine On RewriteRule ^(.*)\.(php|html)$ $1 [L,R=301]
Хотя по хорошему, вместо папок на сервере содержащих index.php, лучше создавать обычные файлы типо login.php и т.д., а в htaccess-е переадресовывть все запросы на единственный файл index.php. В $_SERVER[‘HTTP_REFERER’] у файла index.php будет оставаться адрес скрипта который изначально запросил пользователь( login.php, login.html. login) И уже исходя из него include-ом подгружать нужный файл
Вообщем почитате про «роутинг»
SidorKovpak @SidorKovpak Автор вопроса
Спасибо за ответ. Думал решить силами apache. Сайт на фреймворке, там точка входа одна index.php. Силами фреймворка я убрал index.php. Но понадобилось делать редиректы.
Силами php я могу данный вопрос решить, но думаю более правильней будет решить силами apache
Объяснение кода: убрать расширение php в конце url
Объясните, пожалуйста, код. А если есть ошибки, то исправьте. Этот код для того чтоб в конце url убиралось расширение php . Да кстати, ещё скажите как добавлять сайты для убирания расширения. .htaccess
RewriteEngine on RewriteCond % !-d RewriteCond %\.php -f RewriteRule ^(.*)$ $1.php
Отслеживать
371 1 1 золотой знак 5 5 серебряных знаков 13 13 бронзовых знаков
задан 26 июн 2013 в 16:41
Саша Осипов Саша Осипов
315 1 1 золотой знак 5 5 серебряных знаков 19 19 бронзовых знаков
5 ответов 5
Сортировка: Сброс на вариант по умолчанию
RewriteEngine on //Запускаем движок замены RewriteCond % !-d //если запрашиваемый объект не папка RewriteCond %\.php -f //если запрашиваемый объект с дописанным расширением php - файл RewriteRule ^(.*)$ $1.php //делаем замену с дописыванием .php
В этом коде неправильно сделаны комментарии, поэтому он и не работает.
Комментарии должны писаться отдельной строкой до каждой инструкции и перед ними должен ставится знак # .
Правильно нужно делать так:
# Запускаем движок замены RewriteEngine on # Если запрашиваемый объект не папка RewriteCond % !-d # если запрашиваемый объект с дописанным расширением php - файл RewriteCond %\.php -f # делаем замену с дописыванием .php RewriteRule ^(.*)$ $1.php
В этом случае, инструкции будут работать вместе с комментариями.
Отслеживать
user207618
ответ дан 19 июл 2016 в 12:57
106 1 1 серебряный знак 1 1 бронзовый знак
RewriteEngine on //Запускаем движок замены RewriteCond % !-d //если запрашиваемый объект не папка RewriteCond %\.php -f //если запрашиваемый объект с дописанным расширением php - файл RewriteRule ^(.*)$ $1.php //делаем замену с дописыванием .php
Отслеживать
ответ дан 27 июн 2013 в 2:52
25.8k 1 1 золотой знак 37 37 серебряных знаков 70 70 бронзовых знаков
1.php — это тот самый файл в котором будет убираться расширение? Если да, то напишите как добавить ещё одну страницу
28 июн 2013 в 14:17
не 1.php, а $1.php. Доллар означает, что берем первую переменную из регулярки, которая соответствует первым скобкам.
28 июн 2013 в 15:16
Дак то есть если я этот код вставлю без изменений, прям как здесь написано, то на каждой странице будет уже отображаться без расширения? Если да, то у меня высвечивается ошибка, что нету такой страницы(в конце ссылки просто убираю расширение). А если просто на страницу захожу, то расширение не убирается.
2 июл 2013 в 12:58
.htaccess
AddDefaultCharset UTF-8 RewriteEngine on RewriteRule ^([^.?]+)$ %.php [L] RewriteCond % "^[^ ]* .*?\.php[? ].*$" RewriteRule .* - [L,R=404]
index.php
)" data-controller="se-share-sheet" data-se-share-sheet-title="Поделиться ссылкой на ответ" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter " data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f4.0%2f" data-se-share-sheet-license-name="CC BY-SA 4.0" data-s-popover-placement="bottom-start">Поделиться)" title="">Улучшить ответ)">изменён 11 июл 2019 в 9:51 De.Minov23.6k4 золотых знака35 серебряных знаков68 бронзовых знаковответ дан 6 сен 2016 в 1:27 OnShardOnShard311 бронзовый знак