Как запретить символы "?" и "&" в URL?

N
На сайте с 28.03.2009
Offline
39
2048

Есть блог на Wordpress. Включены "красивые" урлы. Таким образом, символы "?" и "&" в URL используются только в администраторском разделе (по адресу example.com/wp-admin/ и по адресу example.com/wp-login.php). Остальные страницы открываются как http://example.com/pagenumber/ , категории - http://example.com/category/categoryname/ .

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

Например, "реальный" адрес страницы http://example.com/123/ и если ввести в адресной строке:

http://example.com/123/? или

http://example.com/123? или

http://example.com/123/?1a

то происходит редирект на http://example.com/123/ или отдается 404 ошибка. То есть, чтобы не было дублей.

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

Как это сделать?

Предполагаю, что это можно сделать с помощью mod_rewrite, но как именно?

ewg777
На сайте с 04.06.2007
Offline
225
#1

На последних 10-20 страницах раздела должно быть решение. Обсуждалось уже.

ewg777 добавил 13.09.2009 в 20:47

/ru/forum/396163

ewg777 добавил 13.09.2009 в 20:47

/ru/forum/391283

N
На сайте с 28.03.2009
Offline
39
#2

ewg777, спасибо за ссылки!

На всякий случай, напишу здесь решение конкретно для WordPress (на основе решений Polimer по приведенным вами ссылкам).

Вариант 1: если в Wordpress включены "красивые" URL, и нужно запретить символ "?" и любые символы после него, сделав исключения для админки и страницы входа/выхода:

RewriteEngine On


RewriteCond %{THE_REQUEST} \?
RewriteCond %{REQUEST_URI} !/wp-admin/
RewriteCond %{REQUEST_URI} !/wp-login\.php
RewriteRule .* - [G]

Код нужно вставлять в htaccess в начале, до "# BEGIN WordPress", иначе могут возникать ошибки.

Вариант 2: если в Wordpress выключены "красивые" URL (адреса записей и категорий начинаются с "?"), и нужно запретить символ "&" и всё, что после него, сделав исключения для админки и страницы входа/выхода:

RewriteEngine On


RewriteCond %{THE_REQUEST} \&
RewriteCond %{REQUEST_URI} !/wp-admin/
RewriteCond %{REQUEST_URI} !/wp-login\.php
RewriteRule .* - [G]

Еще раз большое спасибо!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий