Как я могу перенаправить все запросы на 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)?
Существуют ли какие-либо проблемы с производительностью с этим методом (не хотите использовать фреймворк)?
Вот то, что я использую (и использую для себя):
<IfModule mod_rewrite.c> # Redirect /index.php to / (optional, but recommended I guess) RewriteCond %{THE_REQUEST} ^[AZ]{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
Использование:
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-адрес: http://www.site.com/friend/josh/03-13-2012
Таким образом, значение var $ params var:
друг / Josh / 03-13-2012
Только нужен explode () "/", поэтому вы получите массив с параметрами:
array( 0 => friend 1 => josh 2 => 03-13-2012 )
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !index\.php$ RewriteRule .*\.php$ index.php?q=%{REQUEST_URI} [L]
Уловит все запросы, заканчивающиеся на .php, которые не указывают на файл, заканчивающийся на index.php, и перенаправляют их на index.php в параметре get q
Чтобы перенаправить все несуществующие запросы в /index.php , вы также можете использовать директивы ErrorDocument и FallbackResource .
Попробуйте воспользоваться одним из следующих примеров:
ErrorDocument 404 /index.php FallbackResource /index.php
Эти директивы являются частью модулей ядра apache, и вам не нужно включать mod-rewrite для их использования.
Если вы ищете способ перенаправления всех запросов (включая реальные файлы / dirs), попробуйте следующее перенаправление
RedirectMatch ^/(?!index\.php).+)$ /index.php