Перенаправление .htaccess

Angel OSHQ.cc
На сайте с 23.07.2007
Offline
225
961

Всем привет, надо перенаправить /index.php?тут что угодно заменить на /

Написал ... вот

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.php\ HTTP/

RewriteRule ^(([^/]+/)*)index\.php(.*)$ http://test.ru/$1$2 [R=301,L]

2)

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.php\??

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

второй вариант оставляет все что после ? знака ... тоесть ?test-32

Что надо подправить. Заранее спасибо

Безлимитный хостинг ( https://oshq.cc/unlimhost.html ) в NL от 0.5$. Аренда серверов во Франции ( https://oshq.cc/serverf.html ) от (15 евро)
gormarket
На сайте с 29.12.2010
Offline
47
#1

Angelys, редирект

test.ru/index.php?тут_что_угодно

на

test.ru/?тут_все_что_было_после_знака_вопроса

делается проще:


RewriteRule ^index\.php$ http://%{HTTP_HOST}/ [R=301,QSA,L]

Если хотите обработать тем же правилом и вложенные каталоги, а не только корневой, то можно так


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

по этому правилу например

test.ru/folder/index.php?тут_что_угодно

переадресуется на

test.ru/folder/?тут_все_что_было_после_знака_вопроса

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
Angel OSHQ.cc
На сайте с 23.07.2007
Offline
225
#2

Спасибо за ответ .. вы немного не поняли ..

надо перенести test.ru/index.php?тут_все_что_было_после_знака_вопроса

на test.ru

gormarket
На сайте с 29.12.2010
Offline
47
#3
Angelys:
надо перенести test.ru/index.php?тут_все_что_было_после_знака_вопроса

на test.ru

Тогда, чтобы сделать редирект, убрав из адреса index.php и строку запроса (все что после ?) сделайте так:


RewriteRule ^index\.php$ http://%{HTTP_HOST}/? [R=301,L]

по этому правилу например

test.ru/index.php?тут_что_угодно

переадресуется на

test.ru/

Angel OSHQ.cc
На сайте с 23.07.2007
Offline
225
#4

Оно работает но ссылки ЧПУ тоже перенаправляются на главную страницу /

gormarket
На сайте с 29.12.2010
Offline
47
#5

Я же не знал, что у Вас есть в .htaccess еще реврайты на index.php.

Поставьте перед новым правилом условие, чтобы оно не примерялось к адресам, к которым уже применен реврайт, чтобы стало так:


RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php$ http://%{HTTP_HOST}/? [R=301,L]
Angel OSHQ.cc
На сайте с 23.07.2007
Offline
225
#6

Спасибо . Все работает

K
На сайте с 27.04.2011
Offline
0
#7

gormarket, спасибо, нашел в вашем коде нужный мне ответ :)

[umka]
На сайте с 25.05.2008
Offline
456
#8

gormarket, сорри за оффтоп, но зачем вы в каждом правиле указываете "http://%{HTTP_HOST}/"?

Ведь можно просто написать "/" и сэкономить ~0.0001% вычислительных ресурсов :)

Лог в помощь!
gormarket
На сайте с 29.12.2010
Offline
47
#9
'[umka:
;8877970']Ведь можно просто написать "/" и сэкономить ~0.0001% вычислительных ресурсов

Наверно все-таки не "/" а "/?" , но в принципе думаю Вы правы, подстановку в этом случае аппчу все равно придется делать, а вот размер .htaccess будет меньше на ~0.00001%.

:)

Так что в свое оправдание могу привести только следующее:

1. как спросили так и ответил (в топике было "http://...", я так и сделал, только универсальнее.)

2. с "http://%{HTTP_HOST}" (как мне кажется) более наглядно, что это редирект, а не реврайт (что может быть сомнительно с учетом наличия еще и "R=301")

3. под руку в нужный момент попался кусок кода с "http://%{HTTP_HOST}" (скопировал, вставил, подправил под текущие нужды)

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