LINUX.ORG.RU

Сложный htaccess redirect

 ,


1

1

Я новичок в этой теме

Мне надо сделать редирект

  1. с www на без www
  2. c index.php в конце на без
  3. без / в конце строки названия сайта

что бы примерно было так, наведу несколько вариантов https://test.ru/index.php -> https://test.ru https://www.test.ru -> https://test.ru https://www.test.ru/index.php/ -> https://test.ru

каждый по отдельности редирект я могу сделать, но как реализовать что бы например https://www.test.ru/index.php/ сработал 1 редирект а не 3 сразу?

Пример моего кода

RewriteCond %{REQUEST_URI} ^\/$
RewriteCond %{REQUEST_URI} /index.php
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]


Последнее исправление: Kohan (всего исправлений: 2)

это необязательно делать через htaccess сам php может анализировать адрес страницы и редиректить.

XoFfiCEr ★★☆☆
()
Ответ на: комментарий от XoFfiCEr

заказчик хочет что бы ответ от сервера был 301 во во всех выше перечисленых случаях Буду благодарен любой информации которая наведет меня на верный путь

Kohan
() автор топика
Ответ на: комментарий от Kohan

нет вроде, подобный заголовок должен отсылаться только один раз. Иначе поисковые боты не поймут что это за такое и не проиндексируют.

XoFfiCEr ★★☆☆
()

Редирект с www на чистый домен вообще можно сделать раздельной настройкой сайтов, как для разных доменов, а в конфиге для www вместо DocumentRoot укзать Redirect 301 https://test.ru/

Oleg_Iu
()
Ответ на: комментарий от Kohan

заказчик хочет что бы ответ от сервера был 301

Вообще, такое в Job нужно. Но, т.к. задача простая, то:

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]

Тут с бонусами: редирект на https, если порт не 443; https://example.com/index.php/hello.html -> https://example.com/hello.html

Разберешься, в общем. Пиво с тебя :)

ответ от сервера должен быть 200

301/302 - код ответа при редиректе. 200 - код ответа после редиректа (если всё Ок).

Stack77
()
Последнее исправление: Stack77 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.