- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте.
Как известно, существует проблема связи 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"...
Здравтсвуйте.
Тут очень простая хитрость.
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
Так я уже пробовал по всякому: и с RewriteCond, подставляя разные переменные сервера и без... Ничего не выходит! На символ запроса "?" в URI mod_rewrite.c не хочет реагировать. Может чего не хватает в "RewriteRule"?
_________________________________
RewriteCond %{QUERY_STRING} .*
RewriteRule ^(.*)&(.*)$ /$1&$2 [L]
А в URI под замену может быть несколько вхождений заменяемых сивмолов. Т.е.
http://localhost/general&sheet=11&offset=1
А в URI под замену может быть несколько вхождений заменяемых сивмолов. Т.е.
http://localhost/general&sheet=11&offset=1
Нет. На моём сайте-- только одно.
Кстати, есть объяснение, почему следующее правило приводит к цикличному "зависанию сервера"?:
RewriteCond %{QUERY_STRING} .*
RewriteRule ^(.*)$ http://localhost/ [L]
Тогда где-то так:
Это кусок для замены, если в строке запроса есть &
RewriteCond %{QUERY_STRING} ^(.*)&(.*)$
RewriteRule ^(.*)$ /$1?%1&%2 [R=301,L]
Редирект вставлен чисто для проверки.
Ну это у Вас и так получалось.
RewriteRule ^(.*)&(.*)$ /$1&$2 [R=301,L]
ПыСы. У рерайтов есть лог, посмотрите ману, его включать нужно прямо в конфиге виртуалхоста. Может помочь в выяснении всех "почему".
Вроде работает. Благодарю.
Значит R=301.-- Вот где собака зарыта. Сейчас посмотрим что это за ключ...
Пожалуйста :)
R= - это редиректы.
на *никсах удобно такое проверять через wget - показывает, куда перекидывает. ТОлько нужно учитывать, что знак "&" для шела значит "запустить в фоне", подобные урлы нужно брать в кавычки.