Php запретить url в

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

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

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

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

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

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

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

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

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

Если вам необходимо убрать .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

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

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

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

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

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

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

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

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

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

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

Источник

Как запретить не существующие GET в URL?

Здравствуйте!
Есть такой формат url ссылки:
product?id=50
И она работает всё хорошо, через GET[‘id’]
Подскажите, как запретить создание такой url:
product?id=50&gg / product?id=50&gg=gg
При этой url открывается та же что в первом случае, но url последняя.
GET[‘id’] не видит что после него идет &, поэтому и открывает страницу как без него.

Как запретить цифры в URL-адресах при написании
В общем задача такая: Имеется сайт, где есть большая группа таких адресов: .

Пункт URL в форме комментариев — как не просто скрыть, но ещё и запретить приём, если введено?
Доброго времени суток. Использую код, который скрывает пункт ввода URL в форме комментариев.

Как спуститься на url уровнем ниже, или перейти из url одного приложения в url другого?
Допустим есть приложение cat и приложение dog. В корневом urls.py прописанно: from django.contrib.

Запретить доступ к действию\контроллеру из url
Здравствуйте, переопределил страницы ошибок: <httpErrors errorMode="Custom".

Как реализовать существующие методы
push/pop, shift/unshift, splice – для добавления и удаления элементов. join/split – для.

Можно сделать проверку с использованием регулярного выражения на QUERY_STRING или целиком REQUEST_URI. Второй вариант поможет выявить в том числе и «одинокий» вопросительный знак в конце пути.

ЦитатаСообщение от kechenkov Посмотреть сообщение

Правильно. Символ & — это разделитель перед следующим параметром. В общем-то он тоже может быть «одиноким», как и упомянутый выше вопросительный знак.

estic, Мне пример php кода нужен, в интернете не нашёл рабочего.
Кроме id в get мне ничего не нужно. А индексация показывает сто Страница есть, хоть она та же.

ЦитатаСообщение от kechenkov Посмотреть сообщение

Непосредственно запрещение делают при помощи вывода страницы 404 или перенаправления (возможно, постоянного, т.е. 301) на корректный адрес. Также можно использовать запрет для индексации поисковыми системами (директива Disallow в robots.txt или метатег robots/заголовок X-Robots-Tag).

Если бы вы использовали адреса наподобие /product/50, запрет в Disallow выглядел бы немного проще. К тому же у Яндекса есть специальная директива для полного запрета адресов со строкой запроса.

Добавлено через 55 секунд

ЦитатаСообщение от kechenkov Посмотреть сообщение

Эксперт PHP

if (!isset($_GET['id']) || count($_GET) > 1) { http_response_code(404); exit('404 page'); }

Jewbacabra, что-то не так, в любом случает выдает 404. Что без product?id=1, что с product?id=1&hh=dd или product?id=1&

Эксперт PHP

ЦитатаСообщение от kechenkov Посмотреть сообщение

Добавлено через 3 минуты

ЦитатаСообщение от kechenkov Посмотреть сообщение

ЦитатаСообщение от kechenkov Посмотреть сообщение

Тут уже нужен разбор $_SERVER[‘QUERY_STRING’]

Добавлено через 3 минуты
А вообще выглядит эта задача как что-то лишнее, для дублей есть rel=canonical

ЦитатаСообщение от Jewbacabra Посмотреть сообщение

Наверное, автор хочет, чтобы фильтр пропускал /product

Добавлено через 6 минут
kechenkov, от «одиноких», множественных, вперемешку вопросительных знаков, амперсандов, знаков равенства анализ $_GET не защитит. В начале темы я написал, как создаются такие фильтры. Но раз вы не разбираетесь в PHP, используйте упомянутые мной запреты на индексацию или, как написали выше, rel=»canonical». Без последнего редко какой сайт обходится. Этим могут похвастаться только сайты, в ядро которых заложено противодействие «дублям».

Добавлено через 2 минуты
Боюсь, что у вас и дубли наподобие /product?id=50gg могут быть, и много еще чего.

Jewbacabra, вывод $_SERVER[‘QUERY_STRING’]
при product?id=50& выдаёт — product&id=50
при product?id=50&gg выдаёт product&id=50&gg

Добавлено через 2 минуты
Jewbacabra, нужно чтобы product?id=1 — работало, а при product?id=1&hh — 404

Добавлено через 1 минуту
Jewbacabra, Возможно стоит сделать проверку по $_SERVER[‘QUERY_STRING’]. Чтобы ограничивала до цифр.

Добавлено через 3 минуты
Jewbacabra, только вот

if($_SERVER['QUERY_STRING'] != 'product&id='.[0-9]){

Добавлено через 4 минуты
Сделал так:

$resultnum= preg_replace("/[^,.0-9]/", '', $_GET['id']); $_SERVER['QUERY_STRING'] != 'product&id='.$resultnum

Добавлено через 23 минуты
estic, Спасибо, конические адресы очень помогают.

Источник

PHP и htaccess: Как запретить символы «?» и «&» в конце URL?

Есть блог на WordPress. C помощью mod_rewrite в htaccess включены «красивые» урлы.

Таким образом, символы «?» и «&» в URL используются только в администраторском разделе (по адресу example.com/wp-admin/ и по адресу example.com/wp-login.php).

Нужно, чтобы при произвольном вводе в адресной строке символов «?» и «&» в конце URL страниц либо отдавалась 404, либо шел редирект на реальную страницу. Например, «реальный» адрес страницы [ссылка заблокирована по решению администрации проекта] и если ввести [ссылка заблокирована по решению администрации проекта] то происходит редирект на [ссылка заблокирована по решению администрации проекта] или отдается 404 ошибка. То есть, чтобы не было дублей.

При этом, нужно сделать исключениями все адреса, начинающиеся на example.com/wp-admin/ и example.com/wp-login.php (т. е. по этим адресам символы «?» и «&» использовать можно) .

ПРИВЕТ АДМИНАМ ОТВЕТОВ. МОЖЕТ, _H TTP://EXAMPLE.COM ВСЕ-ТАКИ ЗАПРЕЩАТЬ НЕ НАДО.

Есть блог на WordPress. C помощью mod_rewrite в htaccess включены «красивые» урлы.

Таким образом, символы «?» и «&» в URL используются только в администраторском разделе (по адресу _http://example.com/wp-admin/ и по адресу _http://example.com/wp-login.php).

Остальные страницы открываются как _http://example.com/pagenumber/ , категории _http://example.com/category/categoryname/ .

Нужно, чтобы при произвольном вводе в адресной строке символов «?» и «&» в URL страниц либо отдавалась 404, либо шел редирект на реальную страницу.

Например, «реальный» адрес страницы _http://example.com/123/ и если ввести _http://example.com/123/?1 то происходит редирект на _http://example.com/123/ или отдается 404 ошибка. То есть, чтобы не было дублей.

При этом, нужно сделать исключениями все адреса, начинающиеся на _http://example.com/wp-admin/ и _http://example.com/wp-login.php (т.е. по этим адресам символы «?» и «&» использовать можно).

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

RewriteEngine on
RewriteBase /

#тут указываем раздел, для которого разрешена передача пареметров в URL:
RewriteRule ^admin/ — [L]

#если после знака «?» есть хоть один символ:
RewriteCond % .

#то перенаправляем запрос в /:
RewriteRule ^.*$ /? [L]

как оказалось, это делается через mod_rewrite, но иначе.

1. если надо убить «?» в URL (он убивается!) и соответственно всё, что после «?», разрешив использовать «?» в URL админки и на странице входа/выхода:

RewriteCond % \?
RewriteCond % !/wp-admin/
RewriteCond % !/wp-login\.php
RewriteRule .* — [G]

2. если надо убить «&» в URL и всё, что после, сделав исключения для админки и страницы авторизации/выхода:

RewriteCond % \&
RewriteCond % !/wp-admin/
RewriteCond % !/wp-login\.php
RewriteRule .* — [G]

при таком раскладе, при попытке набрать «лишние», ненужные нам символы, клиенту будет выдана ошибка 410 (страница более не существует).

в общем, сегодня был удачный день)))

Источник

Читайте также:  Php очистка строки от html
Оцените статью