- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте!
хочу избавится от дублей типа
http://site/?vm=
http://site/index.php?vm=
и свестих ко второму варианту
пишу правило (ну и вариации уже всякие перепробывал)
RewriteRule ^/?vm=(.*)$ http://site/index.php?vm=$1 [R=301,L]
а редиректа не наблюдается, подскажите пожалуйста где я ошибаюсь?
RewriteCond %{QUERY_STRING} vm=(.*)
RewriteRule ^$ http://loc/index.php?vm=%1 [R=301,L]
Хотя может и так подойдет:
RewriteRule ^$ /index.php [R=301,L]
Попробуйте так:
RewriteCond %{REQUEST_URI} ^/vm\=(.+)$
RewriteRule ^(.+)$ /index.php?vm=%1 [L]
Знак вопроса, случаем, не надо подсекать слешем?
Bitman добавил 06.11.2011 в 18:08
А не... всё сложнее. ТС, так вообще не выйдет:
Редирект надо писать в заголовках php.
RewriteCond %{QUERY_STRING} vm=(.*)
RewriteRule ^$ http://loc/index.php?vm=%1 [R=301,L]
Хотя может и так подойдет:
RewriteRule ^$ /index.php [R=301,L]
работают только эти варианты, но работают несколько нестабильно, я для теста написал так RewriteRule ^$ / , мол косячные урлы рулить на морду, но правило таким макаром уходит в рекурсию
(вариант с одной строкой тоже работает, но редиректит / на /index.php - то не айс)
для меня regexp не новое слово, но ^$ крышу сносит, поясните плиз как модреврайт применяет правило пустой строки к непустой строке да еще выцепляет то, что должно быть записано как (.*) ?
ну и собственно почему не возникает рекурсии в вашей первой паре? условие "vm=(.*)" должно сработать равно как для http://site/?vm= так и для http://site/index.php?vm= вроде как корректнее выглядит /\?vm= (русским языком: запрос без index.php)
Elmigo добавил 06.11.2011 в 20:16
Знак вопроса, случаем, не надо подсекать слешем?
Bitman добавил 06.11.2011 в 18:08
А не... всё сложнее. ТС, так вообще не выйдет:
Редирект надо писать в заголовках php.
подсекать надо, но не уверен на счет следующего утверждения, т.к. %{THE_REQUEST} содержит полную строку запроса, т.е. то что упало в лог, к примеру так "GET /index.php?vm=1 HTTP 1.1", наличие такой переменной теоретически как бы отменяет утверждение хотя бы для RewriteCond.
ну и собственно почему не возникает рекурсии в вашей первой паре?
Скорее всего, потому, что там стоит буковка L ;)
вроде как L - это "последнее правило" в цепи условий с прерыванем дальнейшей обработки, но вроде в пределах сессии и после перенаправления на новый адрес все правила сначала будут применятся по новой к новому адресу, иначебы у меня не возникло рекурсии в правиле
RewriteRule ^$ / [R=301,L]
ошибаюсь?
Кстати, насчёт рекурсии. Попробуйте добавить ещё вот это условие, может, поможет:
RewriteCond %{REQUEST_URI} !(index.php)+
для меня regexp не новое слово, но ^$ крышу сносит, поясните плиз как модреврайт применяет правило пустой строки к непустой строке да еще выцепляет то, что должно быть записано как (.*) ?
потому, что ?vm=111, это уже не uri, а строка запроса.
RewriteRule ^$ отлавливается то, что идет до "?", в данном случае ""
ну и собственно почему не возникает рекурсии в вашей первой паре? условие "vm=(.*)" должно сработать равно как для http://site/?vm= так и для http://site/index.php?vm= вроде как корректнее выглядит /\?vm= (русским языком: запрос без index.php)
потому, что срабатывает только для $^ , а после редиректа в uri появляется index.php и поэтому RewriteRule ^$ ... не срабатывает
(вариант с одной строкой тоже работает, но редиректит / на /index.php - то не айс)
Тогда так:
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^$ /index.php [R=301,L]
Словами, наверное, так "если не пустая строка запроса и uri пустой редиректить на /index.php"
>RewriteRule ^$ отлавливается то, что идет до "?", в данном случае ""
допетрил о чем мне хотел сказать Bitman, вам спасибо, ему мои извенения.
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^$ /index.php [R=301,L]
Словами, наверное, так "если не пустая строка запроса и uri пустой редиректить на /index.php"
да - идеально, спасибо за решение и ликбез! И всем попытавшимся помочь тоже спасибо.
Тема закрыта.