Перезапись URL со строковыми параметрами выбранного запроса в .htaccess

Я недавно изменил свой CMS, и хотят переписать некоторые мои URL для соответствия новому формату параметра URL/строки запроса.

Старый URL был:

http://www.mysite.com/search.cgi?tag=foo&blog_id=bar&other=baz

Новый URL должен быть:

http://www.mysite.com/?s=foo

Другими словами, в старом формате было несколько параметров строки запроса, но я только хочу переписать параметрический усилитель тега к s при хранении того же значения. Другие параметры должны быть отброшены. Конечно, порядок параметров не должен иметь значения. Также не должно иметь значения, является ли тег единственным параметром или нет.

Какие-либо идеи?

8
задан mshafrir 21 January 2010 в 17:06
поделиться

1 ответ

Вы можете попробовать использовать регулярные выражения и группировку, если ваш сервер это поддерживает. Если я не ошибаюсь, Вы должны переписать только один параметр, я думаю, Вы можете попробовать что-нибудь вроде (если Вы используете apache с mod_rewrite):

RewriteCond %{QUERY_STRING} ^.*(\btag\b=(\w+|&\w+;)+)
RewriteRule ^(.+) /$1?%1 [L]

Edit: Я немного улучшил регулярное выражение, чтобы оно совпадало с "tag" независимо от его положения в строке запроса и чтобы сохранить специальные последовательности символов, такие как & Кроме того, оно должно избегать совпадения с похожими параметрами (т.е.: оно не будет совпадать с параметром под названием "alttag").

Редактирование #2: Альтернативой (особенно если нужно отфильтровать несколько параметров) является использование внешней программы для перезаписи. Эта страница: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap (в частности, раздел "Внешняя программа перезаписи") содержит полезную информацию.

10
ответ дан 5 December 2019 в 12:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: