переадресация в .htaccess

3
На сайте с 17.07.2010
Offline
0
1069

Здравствуйте.

Как известно, существует проблема связи URI из html с XML в спец. символах. Так символ "&" в html означает часть строки запроса, переданного через URL методом GET. Например: "http://localhost/?page=general&sheet=11". С точки зрения XML данный URL не верен и у меня возникают проблемы при создании XML-файла карты сайта!

Вопрос следующий: после изменения символа "&" на "&" во всех своих ссылках, необходимо как-нибудь заменять его и в адресе, перед загрузкой страницы. Использовать PHP- считаю крайним методом (не хочется добавлять/менять лишний код)... А вот как можно это реализовать в .htaccess?

Я написал правило:

RewriteRule ^(.*)&(.*)$ http://localhost/?page=$1&$2

Оно хорошо работает когда адрес имеет следующий вид: "http://localhost/general&sheet=11", но мне нужно чтобы подмена производилась и в URI вида: "http://localhost/?page=general&sheet=11"...

MC
На сайте с 17.05.2010
Offline
12
#1

Здравтсвуйте.

Тут очень простая хитрость.

3dmax:
URI вида: "http://localhost/?page=general&sheet=11"...

?page=general&sheet=11 - это уже строка запроса и в простой RewriteRule не попадает.

В таком случае нужно использовать

RewriteCond %{QUERY_STRING} ЧтоФильтруем

Это основное.

Подробности http://httpd.apache.org/docs/2.2/mod/mod_rewrite.htm

молчаливое одминко coolvds.com
3
На сайте с 17.07.2010
Offline
0
#2

Так я уже пробовал по всякому: и с RewriteCond, подставляя разные переменные сервера и без... Ничего не выходит! На символ запроса "?" в URI mod_rewrite.c не хочет реагировать. Может чего не хватает в "RewriteRule"?

_________________________________

RewriteCond %{QUERY_STRING} .*

RewriteRule ^(.*)&(.*)$ /$1&$2 [L]

MC
На сайте с 17.05.2010
Offline
12
#3

А в URI под замену может быть несколько вхождений заменяемых сивмолов. Т.е.

http://localhost/general&sheet=11&offset=1

3
На сайте с 17.07.2010
Offline
0
#4
mc_coolvds:
А в URI под замену может быть несколько вхождений заменяемых сивмолов. Т.е.
http://localhost/general&sheet=11&offset=1

Нет. На моём сайте-- только одно.

Кстати, есть объяснение, почему следующее правило приводит к цикличному "зависанию сервера"?:

RewriteCond %{QUERY_STRING} .*

RewriteRule ^(.*)$ http://localhost/ [L]

MC
На сайте с 17.05.2010
Offline
12
#5

Тогда где-то так:

Это кусок для замены, если в строке запроса есть &amp

RewriteCond %{QUERY_STRING} ^(.*)&amp(.*)$

RewriteRule ^(.*)$ /$1?%1&%2 [R=301,L]

Редирект вставлен чисто для проверки.

Ну это у Вас и так получалось.

RewriteRule ^(.*)&amp(.*)$ /$1&$2 [R=301,L]

ПыСы. У рерайтов есть лог, посмотрите ману, его включать нужно прямо в конфиге виртуалхоста. Может помочь в выяснении всех "почему".

3
На сайте с 17.07.2010
Offline
0
#6

Вроде работает. Благодарю.

Значит R=301.-- Вот где собака зарыта. Сейчас посмотрим что это за ключ...

MC
На сайте с 17.05.2010
Offline
12
#7

Пожалуйста :)

R= - это редиректы.

на *никсах удобно такое проверять через wget - показывает, куда перекидывает. ТОлько нужно учитывать, что знак "&" для шела значит "запустить в фоне", подобные урлы нужно брать в кавычки.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий