.htaccess mod_rewrite: переписать строку запроса в путь - PullRequest
3 голосов
/ 02 августа 2009

Как я могу использовать переписать, чтобы изменить:

/? Tag = foo

Кому:

/ бирка / Foo

Я пытался:

RewriteCond %{QUERY_STRING} ^tag=(.+)$
RewriteRule ^(.*)$ http://www.example.com/tag/$1 [L]

Но это не сработало.

Ответы [ 3 ]

6 голосов
/ 02 августа 2009

Попробуйте следующее:

RewriteCond %{QUERY_STRING} ^tag=(.+)$
RewriteRule ^(.*)$ http://www.example.com/tag/%1 [L]

Обычно перезаписи используются для достижения противоположного эффекта. Вы действительно не хотите делать следующее?

RewriteRule ^tag/(.+)$ index.php?tag=$1 [L]
5 голосов
/ 02 августа 2009

Чтобы избежать рекурсии, вы должны проверить строку запроса , поскольку строка запроса в %{QUERY_STRING}, возможно, уже была изменена другим правилом:

RewriteCond %{THE_REQUEST} ^GET\ /\?(([^&\s]*&)*)tag=([^&\s]+)&?([^\s]*)
RewriteRule ^(.*)$ /tag/%3?%1%4 [L,R=301]

Затем вы можете переписать эти запросы обратно без конфликтов:

RewriteRule ^tag/(.*) index.php?tag=$1 [L]
0 голосов
/ 04 июля 2013

Я пытался преобразовать URL-адрес следующим образом:

http://java.scandilabs.com/faq?key=Contents_of__gitigno

На такой URL-адрес:

http://scandilabs.com/technology/knowledge/Contents_of__gitigno

Ответ Эндрю выше работал для меня с добавлением знака вопроса в конце, чтобы отбросить исходную строку запроса:

RewriteCond %{HTTP_HOST} ^java
RewriteCond %{QUERY_STRING} ^key=(.+)$    
RewriteRule ^(.*)$ http://scandilabs.com/technology/knowledge/%1? [R=301,L]

Обратите внимание, если вы используете Apache 2.4 или выше, вы можете использовать флаг QSD вместо знака вопроса.

...