301 редерект для всех каталогов

M
На сайте с 04.05.2017
Offline
5
1147

Добрый день есть каталоги и пагинация для них я хочу сделать редирект с первых страниц каталогов на сами каталоги

например есть url

Категория/город/1

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

Категория/город

сейчас я использую вот такое правило что бы были доступны и Категория/город/1 и Категория/город


RewriteRule ^категория/([a-яА-ЯЁё-]+)/?$ form-city.php?type=1&city=$1&page=1 [L]

Спасибо

M
На сайте с 04.12.2013
Offline
223
#1

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

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

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


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


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

Эээ... если движок перенастроен, а редирект нужен только для того чтобы прежний адрес первой страницы не оказался битым, тогда ОК. Но прежде убедитесь, что движок сам не делает такой редирект.
Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
M
На сайте с 04.05.2017
Offline
5
#2
miketomlin:


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

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

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

AddDefaultCharset UTF-8

Options All -ExecCGI -Indexes
Options -Indexes

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]
слэш на конце сам убирал, если это как то можно в одно правило, буду признателен, движок сам делал точнее это не движок))), я потом найду подходящий мне, сейчас срочно поисковая оптимизация, а там и узнаем стоит ли вообще. Большое спасибо

---------- Добавлено 31.07.2017 в 09:01 ----------

Блин я думал это я неправильно что-то делал и у вас перенаправляет на

.ru/form-freebie-city.php?type=1&city=Питер&page=1

Какое-то правило мешает наверное

M
На сайте с 04.12.2013
Offline
223
#3
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 обычно выносится только комби, показанный ранее, а корректировка адресов с пагинацией происходит уже внутри движка, т.е. возможны два последовательных редиректа. А если взять глобальные корректировки вроде понижения символьного регистра в адресах или избавления от множественных (не трэйлинг) слешей, то и три.

M
На сайте с 04.05.2017
Offline
5
#4

Скажите пытаюсь сделать редирект

с http://test3.ru/тест/1 на test3.ru/тест делаю вот так

RewriteRule ^(тест)/1 /$1 [R=301,L]

либо я что-то не так сделал или где-то перекрывает?

---------- Добавлено 31.07.2017 в 16:14 ----------

и еще вопрос я использую перенаправление вида

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

Спасибо

M
На сайте с 04.12.2013
Offline
223
#5
mikalai:
Скажите пытаюсь сделать редирект...
либо я что-то не так сделал или где-то перекрывает?

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

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

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


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

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

M
На сайте с 04.05.2017
Offline
5
#6
miketomlin:
Все правильно, только в конце маски (первого параметра директивы) закрывающий $ поставьте. Или где-то перекрывает, или просто неправильный вариант в браузере закэширован.

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


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

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

Немножко я не правильно объяснил есть правило


RewriteRule ^тест/([a-яА-ЯЁё-]+)/([-0-9a-za-яА-ЯЁё]+)-([0-9]+)/?$ form-item-city.php?type=1&city=$1&title=$2&id=$3 [L]
RewriteRule ^тест/([a-яА-ЯЁё-]+)/([0-9]+)/?$ form-city.php?type=1&city=$1&page=$2 [L]

есть частный случай когда в параметре город передается страна например Россия и для нее я пишу исключение


RewriteRule ^тест/?$ form-freebie-city.php?type=1&city=Россия&page=1 [L]
#делаю перенаправление что бы дублей не было
RewriteRule ^(тест)/Россия /$1 [R=301,L]

И получается это перенаправление действует на то правили что я описал самым первым в случае если там передается параметр city=Россия (/тест/Россия/создаем-правильный-url-1120) а мне не нужно перенаправление это другой файл вообще form-item-city.php и слово Россия там обязательно

M
На сайте с 04.12.2013
Offline
223
#7

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

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

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

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

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


RewriteRule ^в-дар/1$ /в-дар [R=301,L]
M
На сайте с 04.05.2017
Offline
5
#8
miketomlin:


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

С Россией помогло а вот в-дар нет поставил сразу же после правила для России, и домен сменил все равно редерект не делает

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