Htaccess rewriterule all to index php

Редиректы (переадресация )через .htaccess

Избегайте двух, трех и т.д. последовательных редиректов. Правила должны быть настроены так, что при возникновении редиректа он должен перенаправлять пользователя (робота) только один (!) раз. Каждое лишнее переадресация – это секунды драгоценного времени отдачи страницы, это нагрузка на сервер, это нечеткие команды для поисковых роботов.

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

############################################################################ ### Cтандартный .htaccess #### ############################################################################ RewriteEngine On # Директива включает редиректы. RewriteBase / # Без директивы (.*) = /$1 будет /var/wwww/site/web/$1 с директивой = /$1 Options FollowSymLinks # Разрешает переход по символическим ссылкам. ############################################################################ #### Перенаправляем протокол https на http #### ############################################################################ RewriteCond %{HTTPS} on # Проверяем наличие https в URL. RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI} # Перенаправляем протокол на http. ############################################################################ #### Выбор основного зеркала (или с www или без www) #### ############################################################################ # 1. Редирект с www на без www. (раскоментировать директивы пункта 1) #RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] # Проверяем, содержит ли домен www (в начале URL). #RewriteRule ^(.*)$ http://%1/$1 [R=301,L] # Перенаправляем URL на домен без www. #### # 2. Редирект без www на www. (раскоментировать директивы пункта 2) #RewriteCond %{HTTP_HOST} !^www\.(.*) [NC] # Проверяем, не содержит ли домен www (в начале URL). #RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] # Перенаправляем URL на домен c www. ############################################################################ #### Убираем повторяющиеся слеши (/) в URL #### ############################################################################ RewriteCond %{THE_REQUEST} // # Проверяем, повторяется ли слеш (//) более двух раз. RewriteRule .* /$0 [R=301,L] # Исключаем все лишние слеши. ############################################################################ #### Убираем слеши в конце URL для статических файлов (содержит точку) #### ############################################################################ RewriteCond %{REQUEST_URI} \.. $ # Если файл содержит точку. RewriteCond %{REQUEST_FILENAME} !-d # И это не директория. RewriteCond %{REQUEST_FILENAME} -f # Является файлом. RewriteCond %{REQUEST_URI} ^(. )/$ # И в конце URL есть слеш. RewriteRule ^(. )/$ /$1 [R=301,L] # Исключить слеш. ############################################################################ #### Добавляем слеш(/), если его нет, и это не файл. #### ############################################################################ RewriteCond %{REQUEST_URI} !(.*)/$ # Если слеша в конце нет. RewriteCond %{REQUEST_FILENAME} !-f # Не является файлом. RewriteCond %{REQUEST_URI} !\.. $ # В URL нет точки (файл). RewriteRule ^(.*)$ $1/ [L,R=301] # Добавляем слеш в конце. ############################################################################ #### Убираем index.php, если он есть в конце URL #### ############################################################################ RewriteCond %{REQUEST_METHOD} =GET # Выявляем GET запрос в URL (не POST). RewriteCond %{REQUEST_URI} ^(.*)/index\.php$ # URL cодержит index.php в конце. RewriteRule ^(.*)$ %1/ [R=301,L] # Удалить index.php из URL. ############################################################################ #### Компрессия статического контента для гугл спид тест #### ############################################################################ # Compress HTML, CSS, JavaScript, Text, XML and fonts AddOutputFilterByType DEFLATE application/rss xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE image/svg xml ExpiresActive on ExpiresByType image/jpeg "access plus 3 day" ExpiresByType image/svg "access plus 3 day" ExpiresByType image/gif "access plus 3 day" ExpiresByType image/png "access plus 3 day" ExpiresByType text/javascript "access plus 3 day" ExpiresByType text/css "access plus 3 day" ExpiresByType application/javascript "access plus 3 day"  ############################################################################ #### Конец общей части, далее следует собственные директивы .htaccess #### ############################################################################ 

1. 301 редирект с одной страницы на другую

Redirect 301 /test-1/ http://site.ru/test-2/

Источник

Читайте также:  Try and catch php mysql

Как перенаправлять все запросы на 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

Источник

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

Источник

Оцените статью