Htaccess переадресация index php

Как перенаправлять все запросы на index.php (.htaccess)?

Например www.site.com/faq-one?id=5 — все работает хорошо
www.site.com/catalog?id=10 — 404 ошибка
Однако, если убрать catalog.php в корне, то все работает.

Как сделать, чтобы www.site.com/catalog?id=10 перенаправлялся на index.php и при существующем файле catalog.php?

Satanpit

RewriteEngine On RewriteCond % !-d RewriteCond % !-f RewriteRule ^(.*)$ ./index.php?route=$1

Все после www.site.com/ попадает в $_GET[‘route’]

Не работает, если есть catalog.php. И в данном случае в $_GET массиве есть только ‘route’ => ‘catalog’, а где ‘id’ ?

Я говорю, что если я обращаюсь www.site.com/catalog?id=10 и есть файл catalog.php, то появляется ошибка 404. Если файл catalog.php переименовать в catalog1.php, то все работает.

чтото ты делаешь не так
создал новый хост с такой структурой папок

содержимое файлов
.htaccess
RewriteEngine On
RewriteRule ^.*$ index.php [NC,L]

/catalog/index.php
echo ‘catalog index file’;

при открытии страниц
/ — попадаю на /index.php
/catalog — попадаю на /index.php
/catalog.php — попадаю на /index.php
/catalog/asdasd — попадаю на /index.php
/catalog/index.php — попадаю на /index.php

@shendel у вас директория называется «catalog», а у автора такой директории нет. Но есть файл «catalog.php» в корне.

@Xu4 директория «catalog» для наглядности, что «Нужно, чтобы все запросы, которые приходят на сайт, перенаправлялись на index.php»

@shendel хотя, да, действительно. Тут разницы нет, потому что в случае чего должен был бы «/catalog» как директория отработать, но он нормально перенаправился в корневой index.php.

У меня тоже так работает. А попробуйте удалить категорию catalog и добавить в корень catalog.php.
При обращении www.site.com/catalog?id=10 появляется 404 ошибка

если удалить папку и создать файл, то точно также — все идет в index.php

Если у вас не работает, то может быть несколько возможных проблем
1. У вас там точно стоит апачи? не nginx+php-fm?
2. Если все-таки стоит апачи, перед ним нет прокси (nginx) — если да, то запрос может перехватывать nginx — 404 ошибку кто сообщает (внизу обычно пишется сигнатура веб-сервера — 404 точно апачи отдает?)
3. Может у вас не включен модуль mod_rewrite. Как проверить? создать файл php c содержимым
phpinfo();
?>
в листинге в секции «apache2handler» напротив графы «Loaded Modules» должен присутствовать «mod_rewrite»
4. Файл .htacces у вас точно такой же как я написал, потому что тот файл что привел @Satanpit , не отвечает требованиям вашей задачи
Логика его файла такая
(включить реврайт)
RewriteEngine On
(Если uri не является папкой)
RewriteCond % !-d
(Если uri не является файлом)
RewriteCond % !-f
(Перенаправить на index.php)
RewriteRule ^(.*)$ ./index.php?route=$1

Логика моего же файла такая
(включить реврайт)
RewriteEngine On
(перенаправить на /index.php и сделать правило финальным (остальные правила будут отброшены))
RewriteRule ^.*$ index.php [NC,L]

5. Что прописано в конфиге домена по поводу правил обработки файлов .htaccess?
в секции

AllowOverride All есть?
— по умолчанию обычно там стоит
AllowOveride None

Источник

Редирект через .htaccess

Редирект можно настроить разными способами: в панели управления хостингом, через код HTML, через PHP, с помощью web.config, через .htaccess, а также другими способами. Рассмотрим, в чём особенность редиректа через .htaccess и как настроить 301-й .htaccess-редирект с одной страницы на другую, а также Bitrix redirect.

Если вы ещё не знаете, зачем нужно перенаправление страниц сайта, читайте нашу статью Что такое редирект.

В каких случаях подойдет .htaccess-редирект

Чтобы понять, для каких целей лучше подходит .htaccess-редирект, разберёмся, что такое .htaccess.

.htaccess — этот системный файл, который принадлежит корневой структуре сайта. В отличие от главного конфигурационного файла, который позволяет выполнять настройку веб-сервера в целом, .htaccess даёт возможность изменять настройки для отдельно взятых папок и пользователей.

Файл .htaccess позволяет вариативно настроить сайт. Действие команд из .htaccess распространяется на папки и подкаталоги, расположенные в одной директории с этим файлом. Если для какой-либо вложенной директории нужны иные инструкции, в ней также можно создать .htaccess. Если .htaccess расположен в корневой директории сервера, его действие распространяется на весь сервер, кроме тех директорий, где находится другой файл .htaccess.

Таким образом, через .htaccess можно сделать перенаправление точечно, а не сразу для всего ресурса. Этот вариант отлично подойдет в том случае, если вам нужно настроить переадресацию только для одной или нескольких страниц сайта.

Для чего нужен 301-й редирект

Помимо разных способов настройки переадресации, существуют разные виды редиректов. Каждый из них имеет своё кодовое название. Основные виды:

  • 300 — сообщает, что по искомому запросу можно перейти не на одну, а на несколько альтернативных страниц;
  • 301 — постоянный;
  • 302 — временный;
  • 303 — на схожую по тематике страницу;
  • 305 — отсылающий к подключению через прокси-сервер.

Также существуют 304-й, 306-й и 307-й редиректы. Однако сейчас эти виды практически никто не использует. Один из самых популярных видов — это 301-й.

301-й редирект (Moved Permanently) — это постоянный редирект. Используется для перемещения страницы на новый URL-адрес насовсем. Когда поисковые системы встречают страницу с редиректом 301, они «понимают», что теперь необходимо индексировать новую страницу, а старую можно полностью исключить из индексации. Если настроить переадресацию 301 некорректно, на странице будет отображаться ошибка 404. Индексация страниц с ошибками приводит к снижению SEO-показателей всего веб-ресурса.

Как сделать редирект через .htaccess

Чтобы сделать перенаправление 301 через .htaccess, перейдите в каталог сайта и откройте .htaccess. Если файла ещё не существует, создайте его. После этого добавьте в файл строки кода из подходящей инструкции ниже.

Кириллические домены (в зоне .РФ .РУС и др.) необходимо прописывать в коде в формате Punycode: Как перевести домен в Punycode.

1С-Битрикс — популярная CMS в которой время от времени необходимо настраивать перенаправление.

RewriteCond % off RewriteCond % !^/bitrix/admin/1c_exchange\.php$ [NC] RewriteRule ^(.*)$ https://%% [L,R=301]
 Options +FollowSymLinks RewriteEngine On RewriteCond % ^www.site\.ru$ [NC] RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L] 

Где www.site.ru — домен, с которого происходит редирект, а site.ru — домен, на который происходит редирект.

RewriteCond % on RewriteRule .* - [E=SSL:s] RewriteCond % !^www\.(.*) [NC] RewriteRule ^(.*)$ http%://www.%/$1 [R=301,L]

Где www. — домен, с которого происходит редирект, а www. — домен, на который происходит редирект.

RewriteCond % off RewriteCond % !^/bitrix/admin/1c_exchange\.php$ [NC] RewriteRule ^(.*)$ https://%% [L,R=301]

В файл .htaccess, который находится в папке сайта, с которого необходимо сделать переадресацию, добавьте следующие строки:

RewriteEngine On RewriteCond % old-site.ru RewriteRule (.*) http://new-site.ru/$1 [R=301,L]
  • old-site.ru — домен, с которого происходит редирект;
  • new-site.ru — домен, на который происходит редирект.

Добавьте в .htaccess следующие строки:

RewriteEngine On RewriteCond % site.ru/old-page RewriteRule (.*) http://site.ru/new-page$1 [R=301,L]
  • site.ru/old-page — адрей прежней страницы,
  • site.ru/new-page — адрес новой страницы.

Добавьте в .htaccess следующие строки:

RewriteEngine On RewriteCond % ^www.site.ru$ [NC] RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

Где site.ru — имя вашего домена.

Добавьте в .htaccess следующие строки:

RewriteEngine On RewriteCond % ^site.ru RewriteRule (.*) http://www.site.ru/$1 [R=301,L]

Где site.ru — имя вашего домена.

Добавьте в .htaccess следующие строки:

RewriteEngine On RewriteCond % 123.123.123.123 RewriteRule ^(.*)$ http://site.ru [R=301,L]

Где site.ru — имя вашего домена.

Добавьте в .htaccess следующие строки:

RewriteEngine On RewriteCond % ^443$ [OR] RewriteCond % =on RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

Где site.ru — имя вашего домена.

Добавьте в .htaccess код из нужного вам примера ниже:

Для всех страниц с http:// на https://, в том числе и с http://www на https://

RewriteEngine On RewriteCond % !^443$ RewriteRule .* https://%% [R=301,L]

Если первый вариант не поможет, воспользуйтесь вторым вариантом:

RewriteEngine On RewriteCond % =off RewriteRule (.*) https://%% [QSA,L]

Если все варианты не помогли и возникает циклическая переадресация:

RewriteEngine On RewriteCond % off RewriteCond % !https RewriteRule ^(.*)$ https://%% [L,R=301]
RewriteEngine On RewriteCond % !on RewriteRule ^(.*)$ https://%% [L,R=301]

В примерах ниже переадресация настраивается для страницы login.php:

RewriteEngine On RewriteCond % =off RewriteCond % =/login.php RewriteRule (.*) https://%% [QSA,L]
RewriteEngine On RewriteCond % !^443$ RewriteCond % =/login.php RewriteRule .* https://%% [R,L]

В примере ниже редирект настраивается для страницы test.php.

RewriteEngine On RewriteCond % =off RewriteCond % !^/test.php RewriteRule (.*) https://%% [QSA,L]

В файл .htaccess, который находится в папке сайта, с которого необходимо сделать переадресацию, добавьте следующие строки:

RewriteEngine On RewriteRule ^$ https://site.ru [R=301,L]

Если вам необходимо сделать .htaccess редирект с get параметрами, укажите:

RewriteCond % /index.php RewriteRule ^(.*)$ http://site.ru/ [R=301,L]

Где site.ru — имя вашего домена.

Если вам необходимо сделать .htaccess редирект на index php, введите:

RewriteCond % ^[A-Z]\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ http://site.ru/$1 [R=301,L]

Где site.ru — имя вашего домена.

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

Теперь вы знаете, как сделать редирект со страницы на страницу через htaccess и сможете настроить его по нашей инструкции.

Источник

RaVbaker / readme.md

In one of my pet projects, I redirect all requests to index.php, which then decides what to do with it:

This snippet in your .htaccess will ensure that all requests for files and folders that does not exists will be redirected to index.php:

RewriteEngine on RewriteCond % !-d RewriteCond % !-f RewriteRule . index.php [L] 

This enables the rewrite engine:

This checks for existing folders (-d) and files (-f):

RewriteCond % !-d RewriteCond % !-f 

And this does the actual redirecting:

You can extend this to pass the requested path to the index.php file by modifying the RewriteRule to the following:

RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 

The ^(.*)$ part tells the rewrite module that we want to pass down the whole requested path as one parameter. The QSA part tells the module to append any query strings to the request. The ?q=$1 tells the module how to pass down the parameter. In this case, it’s passed down as the q parameter. You can extend this even further by using regular expressions. For example:

RewriteRule ^([^/]*)(.*)$ index.php?first=$1&second=$2 

This will pass down the first part of the path as the first parameter, and the rest as the second. So the following request

http://yourhost.com/some/path/somewhere 
http://yourhost.com/index.php?first=some&second=path/somewhere 

This allows for some creative ways to do clean URLs.

If it’s not working, make sure that mod_rewrite is installed on Apache. On a unix system you can just do

Источник

Читайте также:  Ошибка файл существует restore php
Оцените статью