Снова 301 редирект через htaccess

12
P
На сайте с 02.04.2015
Offline
9
829

Всем привет.

Туплю, но не могу заставить работать простой редирект.

Надо чтобы со всех адресов сайта где в URL есть index.php был бы переход на адрес уже без этого index.php

c

www.sitename.com/dir/index.php на

www.sitename.com/dir/

а с

www.sitename.com/dir/index.php/pathtopage.html сюда

www.sitename.com/dir/pathtopage.html

Пробовал так

RedirectMatch 301 /dir/index.php/(.*) /dir/$1

и

так

RewriteRule ^dir/index.php/(.+)$ http://www.sitename.com/dir/$1 [R=301,L]

и

RedirectMatch 301 /dir/index.php/(.*) /dir/$1

и наконец так

RewriteCond %{REQUEST_URI} ^\/index\.php\/.*$

RewriteRule ^index\.php\/(.*)$ /$1 [NS,R=301,L]

Но всё не то :(

2 часа с гуглом и манами не привели к желаемому результату :(

Заранее спасибо!

W
На сайте с 09.04.2013
Offline
46
#1

RewriteEngine On

RewriteBase /
RewriteRule ^(.*)index\.(html|php)$ http://%{HTTP_HOST}/$1 [R=301,L]
D.iK.iJ
На сайте с 26.05.2013
Offline
225
#2

У меня на хостинге сработало такое (пришлось самому домучивать):

RewriteEngine On

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ (.*)/index\.(php|html|htm)(.*)\ HTTP/
RewriteRule ^(.*)/index.php/?(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)(\.php|\.html|\.htm)(.*)\ HTTP/
RewriteRule ^(.*)(\.php|\.html|\.htm)/(.*)$ http://%{HTTP_HOST}/$1$2 [R=301]

Одна часть для index.php другая для /dir/index.php. Как сделать изящнее - не знаю :)

Адаптивный дизайн в 2 строчки ( https://dikij.com/wm/adaptaciya-saytov.php ). + Принимаю заказы любой сложности ( https://searchengines.guru/ru/forum/926323 ). 💎 Еще я делаю классные кулоны с опалами ( https://mosaicopal.ru/ ).
P
На сайте с 02.04.2015
Offline
9
#3

webjey, благодарю за ответ, но конкретно это тоже не работает.

У меня чуть выше указано уже

RewriteBase /dir/

А ваш код

RewriteRule ^(.*)index\.(html|php)$ http://%{HTTP_HOST}/$1 [R=301,L]

Почему то пропускает без редиректа такой адрес

www.sitename.com/dir/index.php

А правильные адреса вида

www.sitename.com/dir/pathtopage.html

наоборот редиректит все в корень - www.sitename.com

J
На сайте с 20.02.2014
Offline
120
jkm
#4

В старт-посте регулярки расчитаны на адреса с / после index.php


RedirectMatch 301 ^/dir/index.php(?:/(.*))?$ /dir/$1
P
На сайте с 02.04.2015
Offline
9
#5
DiKiJ:
У меня на хостинге сработало такое (пришлось самому домучивать):
Одна часть для index.php другая для /dir/index.php. Как сделать изящнее - не знаю :)

А это точно редиректит из адресов с index.php на такие же но без него?

Сейчас получаю

отсюда (и аналогичных ссылок)

www.sitename.com/dir/index.php/pathtopage.html

сюда всё идет www.sitename.com/index.php

И аналогично коду webjey:

Почему то пропускает без редиректа такой адрес

www.sitename.com/dir/index.php

---------- Добавлено 02.04.2015 в 19:20 ----------

jkm:
В старт-посте регулярки расчитаны на адреса с / после index.php

Извините в регулярке не силен :(

Этот Ваш код будет работать и со / и без него, т.е. неважно где будет стоять index.php в адресе?


RedirectMatch 301 ^/dir/index.php(?:/(.*))?$ /dir/$1


---------- Добавлено 02.04.2015 в 19:39 ----------

Еще такое пробовал, но также не работает :(
11. 301 редирект всех адресов с index.php и GET параметрами на страницы только с GET параметрами (вырезать в url index.php)

Пример: типа site.ru/index.php?n=1 на site.ru/?n=1

RewriteCond %{REQUEST_URI} /index.php

RewriteRule ^(.*)$ http://site.ru/ [R=301,L]
J
На сайте с 20.02.2014
Offline
120
jkm
#6

Шаблон ^/dir/index.php(?:/(.*))?$ совпадает с адресами

/dir/index.php

/dir/index.php/pathtopage.html

Шаблон ^/dir/index.php/(.*)$ совпадет только с адресами вида /dir/index.php/pathtopage.html

P
На сайте с 02.04.2015
Offline
9
#7
jkm:
Шаблон ^/dir/index.php(?:/(.*))?$ совпадает с адресами
/dir/index.php
/dir/index.php/pathtopage.html

Но в таком виде

RedirectMatch 301 ^/dir/index.php(?:/(.*))?$ /dir/$1

это не работает вообще :(

ни для

/dir/index.php

ни для

/dir/index.php/pathtopage.html

Редирект не происходит вообще и адреса так и остаются без изменений.

J
На сайте с 20.02.2014
Offline
120
jkm
#8

Ну тогда применить аналогичный шаблон с RewriteRule


RewriteEngine On
RewriteRule ^dir/index.php(?:/(.*))?$ /dir/$1 [L,R=301]

Ставить в самое начало файла.

А ставите правила в .htaccess который в корне сайта или может в папке /dir/?

P
На сайте с 02.04.2015
Offline
9
#9
jkm:
Ну тогда применить аналогичный шаблон с RewriteRule

Опять не работает вообще.

Как будто нет такого правила в файле!

RewriteBase /dir/

RewriteRule ^dir/index.php(?:/(.*))?$ /dir/$1 [L,R=301]


---------- Добавлено 02.04.2015 в 20:38 ----------

jkm:
А ставите правила в .htaccess который в корне сайта или может в папке /dir/?

до этого ставил в тот, который внутри /dir/

только что попробовал вставить в корень сайта.

Одинаково не работает почему то..

jeanx
На сайте с 27.09.2009
Offline
60
#10

Попробуйте этот вариант

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^dir/index\.php$ /dir/? [R=301,NE,NC,L]
12

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