Перейти к содержимому

Как убрать php в конце url

  • автор:

Как в .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.Minov
23.6k4 золотых знака35 серебряных знаков68 бронзовых знаков
ответ дан 6 сен 2016 в 1:27
1
    Пожалуйста, постарайтесь писать более развернутые ответы. Уверен, автор вопроса был бы благодарен за ваш экспертный комментарий к приведенному выше коду.
    – Nicolas Chabanovsky
    6 сен 2016 в 5:39
Добавить комментарий|
0

Я не могу объяснить работу вашего кода, но могу дать вам более короткое решение, данной задачи.

RewriteEngine On RewriteRule ^(\w+)$ $1.php [NC]

Убираем .html, .php и .htm в конце URL-адресов на Apache/Nginx

Часто слышу, что сеошники советуют убирать окончания .html, .php и .htm в адресах ваших сайтов – якобы, это негативно влияет на продвижение. Кто-то же говорит, что это просто визуально добавляет адресу лишний мусор.

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

Не утверждаю на 100%, что этот метод не будет работать на какой-то из CMS – пробуйте и о результатах отписывайтесь в комментариях.

Убираем .html, .php и .htm на Apache

Как вы знаете, в Apache существует файл .htaccess, который содержит в себе набор настроек и конфигураций сервера. С его помощью мы и будем убирать ненужные нам окончания.

1. Подключитесь к сайту по FTP и в корне сайта найдите файл .htaccess. Откройте его. Если такой файл отсутствует – создайте.

2. Найдите строчку, содержащую:

 RewriteEngine On

Сразу после нее вставьте следующие правила.

Если вам необходимо убрать .php:

 RewriteCond %{REQUEST_FILENAME> !-f RewriteRule ^([^.]+)$ $1.php [NC,L]

Если вам необходимо убрать .html:

 RewriteCond %{REQUEST_FILENAME> !-f RewriteRule ^([^.]+)$ $1.html [NC,L]

Если вам необходимо убрать .htm:

 RewriteCond %{REQUEST_FILENAME> !-f RewriteRule ^([^.]+)$ $1.htm [NC,L]

Если строчка «RewriteEngine On» отсутствует в файле – добавьте ее в самое начало.

После чего сохраните изменения и отправьте файл обратно на сайт. Если раньше адреса на вашем сайте были вида

 https://www.pandoge.com/page.php

то теперь вы можете открыть эту страницу по адресу:

 https://www.pandoge.com/page

Убираем .html, .php и .htm на Nginx

1. Для того чтобы подобную настройку произвести в Nginx, откройте файл конфигурации по адресу:

 /etc/nginx/nginx.conf

в FTP (если вам позволяют права) либо через панель управления сервером.

2. Далее, в секцию location / , вставляем необходимые правила.

Если вам необходимо убрать .php:

 rewrite ^/([^.]+)$ /$1.php break;

Если вам необходимо убрать .html:

 rewrite ^/([^.]+)$ /$1.html break;

Если вам необходимо убрать .htm:

 rewrite ^/([^.]+)$ /$1.htm break;

Если в процессе настройки у вас что-то не получается – пишите об этом в комментариях.

Рекомендуем к просмотру

Установка бесплатного сертификата от Let’s Encrypt на сайт с сервером CentOS 6 + ISPmanager 4 + Nginx + Apache

Убираем повторяющиеся слеши в конце url на 1C Битрикс

Например, если страница на вашем сайте по адресу https://your-site.ru/page-with-slashes/// будет открываться без проблем и адрес в строке браузера так и останется с кучей слешей на конце, то знайте что для поисковиков:

https://your-site.ru/page-with-slashes///
https://your-site.ru/page-with-slashes//
https://your-site.ru/page-with-slashes/
https://your-site.ru/page-with-slashes

Это четыре разные страницы. Хотя уверен, показывают они одно и тоже.

Исправляем недоразумение

Добавляем в файл .HTACCESS следующий код.

 RewriteCond % // # Проверяем, повторяется ли слеш (//) более двух раз. RewriteRule .* /$0 [R=301,L] # Исключаем все лишние слеши. 

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

Убрать несколько слешей в конце url на Битриксе

Если код выше не сработал, то скорее всего ваш сайт работает на Битриксе в связке FastCGI (Nginx + PHP-FPM), и правила в .HTACCESS для него пустой звук.

Можно настроить редиректы в файлах конфигурации Nginx, но доступ к ним очень редко дают да и то, если сайт крутится на выделенном сервере. А это для небольших проектов, как правило, экзотика и как “пушкой по воробьям”.

Поэтому делаем «костыль» — убираем слеши в URL с помощью PHP

Как это сработало у меня.

С помощью FTP заходим на сайт
Ищем /bitrix/header.php
В конце файла внутри синтаксиса PHP вставляем необходимый код
Готово! Редиректы заработают и повторяющиеся слеши исчезнут.

 $subject = $_SERVER["REQUEST_URI"]; 
$pattern = '/\/\/+/';
$countReplace = 0;
$replaced_url = preg_replace($pattern, '/', $subject, -1, $countReplace);
if ($countReplace > 0)
LocalRedirect($replaced_url, false, '301 Moved Permanently');

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Luxury Car Rental in Miami | Reserve a Premium Vehicle with RealCar