Ru-Board.club
← Вернуться в раздел «Web-программирование»

» mod_rewrite: документация, готовые решения, вопросы

Автор: Givens
Дата сообщения: 03.07.2012 01:52
dacuan
Вы имеете в виду настройку на сервере, или речь идет о правильном оформлении файла htaccess?
на сайте у меня прописан base href а ссылки имеют вид href="news/", href="online/", ..="users/"
Автор: dacuan
Дата сообщения: 03.07.2012 09:56
Givens

Цитата:
Вы имеете в виду настройку на сервере, или речь идет о правильном оформлении файла htaccess?

Оформлении файла .htaccess


Цитата:
на сайте у меня прописан base href

возможно, по какой-то из причин некоторые поисковики не воспринимают ваш base href
Автор: apacen
Дата сообщения: 04.07.2012 13:56
Здравствуйте,
недавно обнаружил, что гугл и яндекс бот начали стучаться на страницы сайта с добавлением в конце пробела, например:
www.example.ru/news/%20
естественно ему выдается 404 ошибка.
Проверил сайт на битые ссылки xenu, так и не на шел откуда он берет такие пути.
Ссылок довольно много.
Как нужно прописать редирект в файле .htaccess, чтобы преобразовать страницу с пробелами в нормальную, т.е. следуя из примера:
www.example.ru/news
?


В итоге сделал так:
RewriteRule ^(.*)\ $ http://www.example.ru/$1 [R=301,L]
вроде работает
Автор: Insomnia22
Дата сообщения: 16.09.2012 19:49
Здравствуйте.
Имеется site1.ru и site2.ru.
Нужен редирект при переходе с поиска Яндекса, т.е. именно с http://yandex.ru/yandsearch?text=
Чтобы при переходе с поиска открывался site2.ru, а с любых других заходов - site1.ru
Подскажите, пожалуйста, как это можно сделать, пробовал и в .htaccess прописывать редирект с реферера, и php-код на страницу добавлять - не получается, возможно что-то не так делаю.
Автор: Cheery
Дата сообщения: 16.09.2012 19:54
Insomnia22

Цитата:
пробовал и в .htaccess прописывать редирект с реферера

пример покажите того, что делали
Автор: Insomnia22
Дата сообщения: 16.09.2012 20:03
Я пока пробовал делать на примере другого моего сайта хоть какой редирект, всё равно не получилось:
RewriteCond %{REQUEST_URI} !/page1.html
RewriteCond %{HTTP_REFERER} http://мой_сайт_с_которого_перехожу.com [NC]
RewriteRule ^.*$ /page2.html [R=302,L]

Про Яндекс вообще молчу, т.к. очевидно что там всё еще сложнее.
Автор: Cheery
Дата сообщения: 16.09.2012 20:06
Insomnia22
вроде все правильно.. а включать mod rewrite не забываете?

выше всего этого добавить
RewriteEngine On
Автор: Insomnia22
Дата сообщения: 16.09.2012 20:23
Да, добавлял, забыл сюда написать, ну и + это и так у меня прописано в .htaccess
Может кто-то знает в чем причина? Или как сделать редирект с выдачи яндекса?
Автор: Cheery
Дата сообщения: 16.09.2012 20:27
Insomnia22

Цитата:
Может кто-то знает в чем причина?

включайте на время логгирование обработки mod_rewrite и смотрите логи

по аналогии все, вроде, правильно (не углублялся сильно в ваш код)
mod_rewrite: документация, готовые решения, вопросы
Автор: Insomnia22
Дата сообщения: 16.09.2012 22:00
Логирование включить нельзя, потому что нету доступа к этому файлу в виртульном хостинге.
Перепробовал еще варианты, не получается.
По-прежнему актуально.
Автор: Cheery
Дата сообщения: 16.09.2012 22:01
Insomnia22
а вы уверены, что у вас mod_rewrite вообще работает и htaccess читается? сделайте ошибку и посмотрите, будет ли выдаваться 500 ошибка.

ps: к тому же проверьте, может ваш файерволл или браузер вырезают реферера
Автор: Insomnia22
Дата сообщения: 17.09.2012 01:04

Цитата:
сделайте ошибку и посмотрите, будет ли выдаваться 500 ошибка.

Напишите, пожалуйста, подробнее, как это сделать.

Цитата:
ps: к тому же проверьте, может ваш файерволл или браузер вырезают реферера

Нет.
Автор: Cheery
Дата сообщения: 17.09.2012 01:12
Insomnia22

Цитата:
Напишите, пожалуйста, подробнее, как это сделать.

да напишите что хотите в htaccess файле, чушь всякую
если он читается, то это вызовет 500 ошибку сервера, если же не читается сервером, то ничего не будет.
Автор: Insomnia22
Дата сообщения: 18.09.2012 00:30
Написал, вызвало ошибку.
Автор: Cheery
Дата сообщения: 18.09.2012 01:53
Insomnia22
да все правильно в записи.. возможно не в тех условиях пробуете.
лучше, все же, умудриться включить логгирование - тогда ясно будет в чем дело.

Автор: ra1n
Дата сообщения: 21.10.2012 20:51
Подскажите как настроить 301 редирект.
Необходимо установить 301 редирект со страниц вида
http://site.ru/katalog/katalog/
На адреса вида
http://site.ru

Примеры страниц, для которых должен выполняться редирект:
http://site.ru/katalog/katalog/razdel1 -> http://site.ru/razdel1
http://site.ru/katalog/katalog/razdel2 -> http://site.ru/razdel2

И ещё один тип редиректа надо сделать:
http://site.ru/podrazdel3 -> http://site.ru/razdel3/podrazdel3

Это страницы интернет-магазина, нужен не простой редирект, а что бы при запросе к конкретному товару по старому УРЛу, так же срабатывал редирект и открывалась карточка товара с новым УРЛом.

Спасибо!
Автор: JekaRus
Дата сообщения: 22.10.2012 12:39
ra1n
Такой редирект настраивается в файле .htaccess
Вот пример 301 редиректа
RewriteEngine On
RewriteBase /
RewriteRule ^katalog/katalog/razdel1$ razdel1 [R=301,NC,L]
RewriteRule ^podrazdel3$ razdel3/podrazdel3 [R=301,NC,L]
Автор: DJ_Scorp
Дата сообщения: 22.10.2012 17:06
Здравствуйте, просмотрел здесь много пример, но так и не удалось разобраться как реализовать следующее:

При вводе адреса: http://site.ru/prez?one
чтоб указывало и открывался адрес на: http://site.ru/prez.php?r=one

где prez - это несуществующее сокращение указывающее на существующую страницу
и one - сам параметр который должен передаваться в ту страницу

Помогите, пожалуйста, реализовать даную штуку, и желательно чтоб если параметра нету, то есть так: http://site.ru/prez, то чтоб открывало просто cfve cnhfybxre http://site.ru/prez.php
Автор: CheRt
Дата сообщения: 23.10.2012 16:20
Что-то вроде

Код:
RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)$ http://site.ru/$1.php?r=%1 [R=301]
Автор: DJ_Scorp
Дата сообщения: 23.10.2012 23:31

Цитата:
Что-то вроде

Код:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)$ http://site.ru/$1.php?r=%1 [R=301]


Спасибо за ответ, но увы не срабатывает! К тому же редирект мне не нужен.
Кроме того в примере выше переходит на адрес http://site.ru/.php?r=one, а это неправильно, так как в случаи если не указана страница, то должно быть так в итоге http://site.ru/?r=one

Жду ещё помощи.
Автор: Cheery
Дата сообщения: 24.10.2012 00:16
DJ_Scorp

Цитата:
так как в случаи если не указана страница

ну так этот случай нужно отдельно оговаривать


RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^(.+)$ http://site.ru/$1.php?r=%1 [L]

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^$ http://site.ru/?r=%1 [L]

что нить такое )
Автор: DJ_Scorp
Дата сообщения: 24.10.2012 00:32

Цитата:
RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^(.+)$ http://site.ru/$1.php?r=%1 [L]

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^$ http://site.ru/?r=%1 [L]



Такой вариант тоже не срабатывает.
Автор: Cheery
Дата сообщения: 24.10.2012 00:36
DJ_Scorp

Цитата:
Такой вариант тоже не срабатывает.

а вы его куда прописываете ?)
в конфиг или в htaccess?
Автор: DJ_Scorp
Дата сообщения: 24.10.2012 00:41
В HTML )))

Конечно в .htaccess
Автор: Cheery
Дата сообщения: 24.10.2012 00:52
DJ_Scorp
ну так описали бы в чем дело )) там условие нужно, чтобы бесконечного цикла не было.
например так

Код: RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.+)$
RewriteCond %{QUERY_STRING} !^r=
RewriteRule ^(.+)$ http://site/$1.php?r=%1 [L]

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteCond %{QUERY_STRING} !^r=
RewriteRule ^$ http://site/?r=%1 [L]
Автор: DJ_Scorp
Дата сообщения: 24.10.2012 01:12
Не работает! Описываю ещё:


Когда человек заходит по адресу такого вида http://site.ru/prez?one
он должен попадать на адрес такого вида: http://site.ru/prez.php?r=one

Если он заходит на адрес http://site.ru/?one то соответственно должен попадать на http://site.ru/?one или http://site.ru/index.php?one

Если он заходит на адрес http://site.ru/prez или http://site.ru/prez/ (то есть без параметров) то соответственно должен попадать на http://site.ru/prez.php

При всём этом конечно тот адрес который он ввёл в адресную строку должен там таким и оставаться, то есть никаких редиректов, обычная подмена ссылок для удобства запоминания и написания.
Автор: Cheery
Дата сообщения: 24.10.2012 01:16
DJ_Scorp

Цитата:
Не работает!

что именно не работает? опишите что происходит не так
вот это работает у меня как и написали

Код: RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.+)$
RewriteCond %{QUERY_STRING} !^r=
RewriteRule ^(.+)$ /$1.php?r=%1 [L]

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteCond %{QUERY_STRING} !^r=
RewriteRule ^$ /index.php?r=%1 [L]
Автор: DJ_Scorp
Дата сообщения: 24.10.2012 01:21
Параметр не передаётся

В адресе запроса указывается сразу значение параметра, а уже в том адресе на который направляет там это значение присваивается самому параметру и передаётся в скрипт методом GET
Автор: Cheery
Дата сообщения: 24.10.2012 01:24
DJ_Scorp

Цитата:
Параметр не передаётся

проверял - все передается.
http://127.0.0.1/test?000
дает

Цитата:
_SERVER["QUERY_STRING"]    r=000
_SERVER["SCRIPT_NAME"]    /test.php
_REQUEST["r"]    000
_GET["r"]    000
Автор: DJ_Scorp
Дата сообщения: 24.10.2012 01:26
Странно, что же может быть.. хм... в скрипте принимаю как обычно через $_GET['r']

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

Предыдущая тема: PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.