通过index.php重新路由所有PHP请求

如何通过index.php重新路由所有的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具有网站页眉/页脚。

它将404redirect到index.php。 我怎样才能redirect所有的请求到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示例:www.site.com/friend/josh/03-13-2012

所以$ params var值:

朋友/乔希/ 2012年3月13日

只需要爆炸()“/”所以你得到数组与PARAMS:

 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结尾的文件,并将其redirect到get参数q index.php

要将所有不存在的请求redirect到/index.php ,您还可以使用ErrorDocumentFallbackResource指令。

尝试以下示例之一:

  ErrorDocument 404 /index.php FallbackResource /index.php 

这些指令是Apache核心模块的一部分,你不需要启用mod-rewrite来使用它们。

如果您正在寻找redirect所有请求(包括真实文件/目录)的方法,请尝试以下redirect

 RedirectMatch ^/(?!index\.php).+)$ /index.php