miketomlin

Рейтинг
235
Регистрация
04.12.2013

Неправильное разруливание адресов запросах.

Или каждая статья представлена отдельной точкой входа и PATH_INFO не отключен.

В общем-то проблема известная даже у нек. популярных движков, что впрочем не отменяет их кривизну. Какой движок?

Или поднимите выше последний фрагмент или поставьте $ (ну либо /?$) после Россия.

---------- Добавлено 31.07.2017 в 19:22 ----------

mikalai:
вот так просто и так не работает буду пытаться с другой папки запустить что бы наверняка если правильно понял Вас

RewriteRule ^(в-дар)/1$ /$1 [R=301,L]

Ну да, если в-дар будет обобщаться. Конкретно для в-дар можно и так написать:


RewriteRule ^в-дар/1$ /в-дар [R=301,L]
mikalai:
Скажите пытаюсь сделать редирект...
либо я что-то не так сделал или где-то перекрывает?

Все правильно, только в конце маски (первого параметра директивы) закрывающий $ поставьте. Или где-то перекрывает, или просто неправильный вариант в браузере закэширован.

и еще вопрос я использую перенаправление вида
RewriteRule ^(тест)/москва /$1 [R=301,L]
но у меня есть правило которое формирует тест/москва /создаем-правильный-url-1120 b и для этого url делается редирект как сделать так что бы редирект был только у этого адреса тест/москва
Спасибо

Опять-таки правило для частного случая разместите выше. Если вы хотите отключить редирект для частного случая, в соотв. правиле в качестве подстановки (второго параметра директивы) нужно поставить - (дефис) и добавить флаг L, либо добавить к общему правилу доп. условие, исключающее частный случай, например:


RewriteCond %{REQUEST_URI} !=/тест/москва/создаем-правильный-url-1120

...если я вас правильно понял.

Не увидел, чтобы вы где-то в коде генерировали 500-ую. Возможно, происходит зацикливающий редирект.

---------- Добавлено 31.07.2017 в 12:40 ----------

На скрине у вас 500-ая даже на фэйвайконе срабатывает. Т.е. ошибка может быть и не в коде, т.к. по идее запросы к статику передавать во фронт не нужно.

Потому что якоря по HTTP не передаются.

Если точнее, то в HTTP-запросах не передаются.

mikalai:
Это мне нужно что бы дубля не было в движке все ссылки будут вести на Категория/город и Категория/город/2. Ну то есть это перенаправление будет срабатывать если кто-то вручную будет вводить что ли

Вменяемые движки не плодят подобные дубли, оставляя только один вариант, а по другому – либо 301, либо 404, либо один из двух пред. вариантов на выбор.

Можно еще вопрос как переправить все на http:// без WWW и всего прочего


RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule (.*)/*$ http://%1/$1 [R=301,L]

RewriteRule (.*)/+$ /$1 [R=301,L]

Это комби для избавления от www и трэйлинг слешей. Только добавьте еще к каждому правилу ваше условие «если не каталог», чтобы не было зацикливания на каталогах. Либо отключите автодобавление трэйлинг слеша на каталогах, если оно происходит:


<IfModule mod_dir.c>
DirectorySlash Off
</IfModule>
Блин я думал это я неправильно что-то делал и у вас перенаправляет на
.ru/form-freebie-city.php?type=1&city=Питер&page=1
Какое-то правило мешает наверное

Тут явно замешан ваш рерайт. Редиректы обычно прописываются выше рерайтов, с флагом L.

---------- Добавлено 31.07.2017 в 12:15 ----------

Насчет «и всего прочего» не понял. Массовый слив – это плохо. Если же под прочим понимается /1/? на конце, то как-то так:


RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule (.*)/1/*$ http://%1/$1 [R=301,L]

RewriteRule (.*)/1/*$ /$1 [R=301,L]

Можно и отдельно перенаправлять с /1 на конце, разместив это правило ниже комби, показанного ранее. ПС понимают несколько подряд идущих редиректов, если это делать без фанатизма. Например, в наших движках в .htaccess обычно выносится только комби, показанный ранее, а корректировка адресов с пагинацией происходит уже внутри движка, т.е. возможны два последовательных редиректа. А если взять глобальные корректировки вроде понижения символьного регистра в адресах или избавления от множественных (не трэйлинг) слешей, то и три.

feyona:
что вы подразумеваете под возможностью объединить старый и новый сайты, прежде всего в плане адресации. Разве не 301 редирект о котором я говорю?

Я вроде достаточно подробно расписал. Подкладываете новый сайт под старый домен, сохраняя прежние адреса страниц там, где это возможно. Где невозможно – 301 редирект со старых адресов на новые (совсем мусор можно оставить без ресолва: периодическое отваливание ненужных страниц – это норма), в пределах единственного объединенного сайта.

и почему постраничный редирект - это убийство сайта?

Я сказал «убийство СТАРОГО сайта». Это очевидно.

Адрес первой страницы списка обычно в движке настраивается. Если вы сделаете редирект отдельно, а на страницах сайта будет формироваться старый адрес, это оч. криво.

---------- Добавлено 30.07.2017 в 23:51 ----------

Если все же предпочитаете костыли, то как-то так:


RewriteRule ^(категория/[a-яА-ЯЁё-]+)/1$ /$1 [R=301,L]


---------- Добавлено 30.07.2017 в 23:58 ----------

Эээ... если движок перенастроен, а редирект нужен только для того чтобы прежний адрес первой страницы не оказался битым, тогда ОК. Но прежде убедитесь, что движок сам не делает такой редирект.

feyona, можно было практически все изменить, оставив/расширив прежнюю адресацию. Если она была уж очень уродская, можно было делать частично или полностью редирект в рамках этого же сайта, перехватывая старые адреса при помощи штатных возможностей нового движка или нестандартных надстроек (хаков). Подумайте над возможностью объединить старый и новый сайты, прежде всего в плане адресации. Если вам совсем тяжко это сделать, тогда – постраничный редирект со старого сайта на новый, хотя конечно это убийство старого сайта, когда в почете развитие.

semur123, заведи себе бложик. Я вот попросил жену выделить ветку для моих опусов и теперь никого не достаю. Вот почитай, может, что подчерпнешь для себя: Как сделать пагинацию?

Всего: 2534