Редирект с "site.loc/?" на "site.loc/"

Нужно сделать редирект с страницы "site.loc/?" на "site.loc", будет огромным плюсов если это будет работать на всех страницах, то есть "site.loc/page/?". Подойдет решение и на PHP. Все работает под управлением CMS WordPress.

Пробовал сделать с помощью

RedirectMatch 301 ^/?$ /

Проверял отдельно на htaccess.madewithlove.be и работает для главной страницы. Но как только добавляю уже до рабочего файла, который выглядит вот так:

# BEGIN WordPress
# Директивы (строки) между `BEGIN WordPress` и `END WordPress`
# созданы автоматически и подлежат изменению только через фильтры WordPress.
# Сделанные вручную изменения между этими маркерами будут перезаписаны.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

То перестает работать, если в конец файла разместить. Если разместить в начале файла, начинается циклический редирект.

Заранее спасибо.


Ответы (1 шт):

Автор решения: tutankhamun

Если нужно убрать пустой вопрос то решение вот:

RewriteBase /
RewriteCond %{THE_REQUEST} "^.+ .+\? "
RewriteRule (.*) $1? [R=301,L]

Тут приходится делать две странные вещи:

  1. Искать вопрос в конце URI в переменной THE_REQUEST. Дело в том что эта перемнная разделяется в дальнейшем на REQUEST_METHOD, REQUEST_URI, QUERY_STRING и SERVER_PROTOCOL. При этом "вопрос" теряется. То есть его нету ни в REQUEST_URI ни в QUERY_STRING;
  2. Подставлять вопрос в RewriteRule чтобы вопрос убрать (ну вот так это работает)
→ Ссылка