Убрать "index.php" в адресной строке

Если Вы не нашли подходящего раздела, для вопроса связанного с web строительством, то Вам сюда.
Аватара пользователя
Местный бот
Сообщения: 153

Убрать "index.php" в адресной строке

Сообщение Местный бот » Вс окт 25, 2015 8:27 am

Доброго утра!
Если ввести адрес главной страницы, то она откроется сайт без /index.php, а если переходить из внутренней страницы на главную, то главная уже имеет продолжение в виде /index.php. Думаю, что поисковики могут посчитать эту страницу за дубль, вот хочу убрать из адресной строки этот index.php.
<php
// Понравилось? Жми большой палец вверх.
// Местный бот 2014 - 2016 ©

echo 'Большой Привет от Местного бота!';
Реклама
Аватара пользователя
Slash
Администратор
Сообщения: 2031
Поблагодарили: 62 раза

Re: Убрать "index.php" в адресной строке

Сообщение Slash » Вс окт 25, 2015 11:50 am

Как вариант. Изменить ссылку на главную страницу, вот так:

Код: Выделить всё

<a href="./">Главная страница</a

И в файле .htaccess прописать:

Код: Выделить всё

# URL Rewrite
<IfModule mod_rewrite.c>
    
RewriteEngine On
    RewriteRule 
^index.php$ / [QSA,R]    
</
IfModule
lyod
Сообщения: 76
Поблагодарили: 1 раз

Re: Убрать "index.php" в адресной строке

Сообщение lyod » Вс окт 25, 2015 6:12 pm

Желательно ещё и код перенаправления указать, чтобы поисковик правильно понимал перенаправление:

Код: Выделить всё

RewriteRule ^index.php$ / [QSA,R=301
cefp
Сообщения: 333
Поблагодарили: 3 раза

Re: Убрать "index.php" в адресной строке

Сообщение cefp » Пн дек 07, 2015 11:45 am

Еще один вариант, который пригодится, если нужно оставить без редиректа длинные адреса, в которых после "index.php" есть другие символы. То есть редирект срабатывает, только если после "index.php" стоит пробел или нет других символов. Код:

Код: Выделить всё

# убираем index.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule 
^index.php\ +$ / [QSA,R=301]    
</
IfModule>
 
d o h o d - s - n u l y a .ru - идеи бизнеса.
Аватара пользователя
June
Сообщения: 22

Re: Убрать "index.php" в адресной строке

Сообщение June » Пн дек 07, 2015 6:34 pm

Во всех приведенных вариантах есть риск зацикливания. Обычно подобное делается через условие с использованием переменной %{THE_REQUEST}

Что же касается сообщения автора темы, то я бы посоветовала ему изменить на страницах сайта внутренние ссылки, чтобы в них не было index.php

Оптимальным решением было бы с самого начала закрыть все подобные ссылки, чтобы они никогда нигде не всплывали. Тогда в перенаправлении вовсе нет никакой необходимости. В наших движках такой проблемы не существует. Нужно специально заводить в маршрутизатор index.php, чтобы получить что-то отличное от ошибки 404, иначе вы всегда будете получать именно ее (или в крайнем случае то, что заложено в обработчике этой ошибки): http://gency.ru/index.php

Добавлено спустя 6 минут 44 секунды:
P.S. Поисковики адекватно оценивают текущую ситуацию и поэтому терпимо относятся к подобным дублям. Но если желание и возможность, лучше конечно их устранить.
cefp
Сообщения: 333
Поблагодарили: 3 раза

Re: Убрать "index.php" в адресной строке

Сообщение cefp » Пт дек 11, 2015 11:56 pm

Что-то у меня перестал работать мой редирект, не пойму с чем это связно. Как еще можно сделать?
d o h o d - s - n u l y a .ru - идеи бизнеса.
Аватара пользователя
June
Сообщения: 22

Re: Убрать "index.php" в адресной строке

Сообщение June » Сб дек 12, 2015 3:46 pm

Обычно подобное делается через условие с использованием переменной %{THE_REQUEST}
cefp
Сообщения: 333
Поблагодарили: 3 раза

Re: Убрать "index.php" в адресной строке

Сообщение cefp » Сб дек 12, 2015 4:05 pm

Как добавить такое условие?
d o h o d - s - n u l y a .ru - идеи бизнеса.
Аватара пользователя
June
Сообщения: 22

Re: Убрать "index.php" в адресной строке

Сообщение June » Сб дек 12, 2015 6:57 pm

http://httpd.apache.org/docs/2.4/mod/mo ... ewritecond

Добавлено спустя 7 минут 58 секунд:
Якорь проглатывается форумом. Вот: http://g09.ru/rewritecond
cefp
Сообщения: 333
Поблагодарили: 3 раза

Re: Убрать "index.php" в адресной строке

Сообщение cefp » Сб дек 12, 2015 8:35 pm

Вот нашел, что это такое:
Полная строка HTTP запроса отправленная браузером серверу (т.е., «GET /index.html HTTP/1.1»). Она не включает какие-либо дополнительные заголовки отправляемые браузером.

Осталось понять как использовать эту переменную.
Нашел еще один редирект с её использованием:

Код: Выделить всё

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.phpHTTP/
RewriteRule ^index\.phphttp://site.cm [R=301,L] 
d o h o d - s - n u l y a .ru - идеи бизнеса.
Аватара пользователя
June
Сообщения: 22

Re: Убрать "index.php" в адресной строке

Сообщение June » Сб дек 12, 2015 9:54 pm

На первый взгляд вполне работоспособный пример. Как раз делает редирект с /index.php на / (точнее на http://site.cm/, но цель у автора, видимо, была такая же, как и у нас).

Добавлено спустя 6 минут 25 секунд:
P.S. Не забывайте, что в строке запроса могут присутствовать GET-параметры. Условие можно сделать универсальнее, укоротив его:

Код: Выделить всё

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php
cefp
Сообщения: 333
Поблагодарили: 3 раза

Re: Убрать "index.php" в адресной строке

Сообщение cefp » Вс дек 13, 2015 8:23 pm

У меня сработал такой код:

Код: Выделить всё

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond 
%{THE_REQUEST} ^[A-Z]{3,9}\ /index\.phpHTTP/
RewriteRule ^index.php$ / [QSA,R=301]
</
IfModule

Мне нужна переадресация только с index.php без переадресации с более длинных адресов.
d o h o d - s - n u l y a .ru - идеи бизнеса.
Аватара пользователя
June
Сообщения: 22

Re: Убрать "index.php" в адресной строке

Сообщение June » Вс дек 13, 2015 9:01 pm

Ну, если у вас в адресах нет у index.php GET-параметров, а также PATH_INFO (/index.php/xxx), то можно и так оставить.
cefp
Сообщения: 333
Поблагодарили: 3 раза

Re: Убрать "index.php" в адресной строке

Сообщение cefp » Вс дек 13, 2015 11:47 pm

У index.php есть GET-параметр, работает, почему так лучше не оставлять? Разве обратный слеш после .php не означает, что адреса с GET-параметром не обрабатываются. Обратный слеш после .php в строке:

Код: Выделить всё

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.phpHTTP

Адресов вида /index.php/xxx нет, по поводу наличия PATH_INFO затрудняюсь сказать.
d o h o d - s - n u l y a .ru - идеи бизнеса.
Аватара пользователя
June
Сообщения: 22

Re: Убрать "index.php" в адресной строке

Сообщение June » Пн дек 14, 2015 12:30 am

Это означает, что они не обрабатываются правилом. Соответственно редиректа с /index.php?something на /?something вы не получите.

Что же касается PATH_INFO, то эта часть пути точно также, как и необрабатываемые GET-параметры, может стать источником бесчисленного количество дублей, если не запрещать ее специально. Проверьте, как ваш сайт реагирует на адреса вроде /index.php/something.

Добавлено спустя 3 минуты 37 секунд:
Слеш, кстати, тоже это пропустил: index.php/something. Хорошо, что движок форума имеет на этот случай специальную заглушку.

Вернуться в «Прочее»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость