Перенаправление всех запросов php через index.php
Как перенаправить все запросы на php-страницы через index.php?
Мой .htaccess выглядит следующим образом:
Options +FollowSymLinks
IndexIgnore */*
#Turn on the RewriteEngine
RewriteEngine On
# Rules
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !.*\.(js|ico|gif|jpg|png|css|pdf)$ index.php%{REQUEST_URI} [L]
В основном, я пытаюсь эмулировать основные страницы .NET. Index.php имеет заголовок/нижний колонтитул сайта.
Он перенаправляет 404 на index.php. Как я могу перенаправить все запросы на php-страницы (кроме самого index.php)?
Есть ли проблемы с этим способом (не хотите использовать фреймворк)?
Ответы
Ответ 1
Вот то, что я использую (и использовал для возрастов):
<IfModule mod_rewrite.c>
# Redirect /index.php to / (optional, but recommended I guess)
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.php
RewriteRule ^index.php/?(.*)$ $1 [R=301,L]
# Run everything else but real files through index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1?%{QUERY_STRING} [L]
</IfModule>
Как следует из комментариев, он будет маршрутизировать каждый запрос, который не является фактическим файлом index.php
Ответ 2
Использование:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|public|css|js|robots\.txt)
RewriteRule ^(.*)$ index.php/params=$1 [L,QSA]
ErrorDocument 404 /index.php
Пример URL:
www.site.com/friend/josh/03-13-2012
Итак, значение var param:
друг/Josh/03-13-2012
Только нужен explode() "/", поэтому вы получите массив с параметрами:
array(
0 => friend
1 => josh
2 => 03-13-2012
)
Ответ 3
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !index\.php$
RewriteRule .*\.php$ index.php?q=%{REQUEST_URI} [L]
Ухватит все запросы, заканчивающиеся на .php, которые не указывают на файл, заканчивающийся на index.php, и перенаправляют их на index.php в параметре get q
Ответ 4
Чтобы перенаправить все несуществующие запросы на /index.php, вы также можете использовать директивы ErrorDocument и FallbackResource.
Попробуйте использовать один из следующих примеров:
ErrorDocument 404 /index.php
FallbackResource /index.php
Эти директивы являются частью модулей ядра apache, и вам не нужно включать mod-rewrite для их использования.
Если вы ищете способ перенаправления всех запросов (в том числе реальных файлов /dirs ), попробуйте следующее перенаправление
RedirectMatch ^/(?!index\.php).+)$ /index.php