2009-08-02 2 views

ответ

5

Чтобы избежать рекурсии, вы должны проверить request line вместо этого как строка запроса в %{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] 
+3

Andrew Moore and Gumbo Спасибо, но большое спасибо. Я пытаюсь решить более чем одну неделю без успеха. Решение, предлагаемое Gumbo, разрешает проблему. При встрече с людьми, желающими помочь другим, которые не знают, я уверен, что у нас может быть лучший мир. Извините ошибки, но мои знания английского языка очень ограничены. Я просто хочу поблагодарить. Vera – Vera

+0

@Vera: Получил ваше сообщение :) – Gumbo

+0

Вы решили мою проблему, когда все другие ответы stackoverflow на аналогичных сообщениях не могли. благодаря –

6

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

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

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

RewriteRule ^tag/(.+)$ index.php?tag=$1 [L] 
0

Я пытался конвертировать из 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 вместо вопросительного знака.

Смежные вопросы