Я заметил, что директива RedirectMatch сохраняет строку запроса при перенаправлении. То есть, если http://www.mydomain.com/someurl?some=query соответствует правилу, затем он перенаправляется на / something / other / url? some = query с сохранением строки запроса в новом URL-адресе.
Как я могу сказать ему НЕ сохранять строку запроса и перенаправлять только на / любой / другой / URL без какой-либо строки запроса?
В ?
в конце правила - единственный способ явно удалить существующую строку запроса. Из документация:
По умолчанию строка запроса передается без изменений. Однако вы можете создать URL-адреса в строке подстановки, содержащей часть строки запроса. Просто используйте вопросительный знак внутри строки подстановки, чтобы указать, что следующий текст следует повторно вставить в строку запроса. Если вы хотите стереть существующую строку запроса, завершите строку подстановки только вопросительным знаком. Чтобы объединить новые и старые строки запроса, используйте флаг [QSA].
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
Нет документации о том, как избежать добавления строки запроса, хотя наличие QSA
вариант предполагает, что Apache может иметь поведение, несколько похожее на nginx
- замыкающий ?
гарантирует, что предыдущая строка запроса не добавлена.
Кстати, если это не работает в Apache, я искренне приглашаю вас попробовать nginx
. Помимо отличной производительности, он также имеет отличную документацию, простоту настройки и добавление ?
просто удаляет старую строку и не приводит к появлению пустого вопросительного знака в результирующем перенаправлении. Таким образом, он в основном просто работает в nginx, и все поведение, даже если оно официально задокументировано, так что вам не нужно прыгать через какие-либо обручи.
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite
Если строка замены включает новые аргументы запроса, предыдущие аргументы запроса добавляются после них. Если это нежелательно, поставьте вопросительный знак в конце строки замены, чтобы избежать их добавления.