通过index.php重新发送所有php请求

时间:2012-03-14 00:08:01

标签: php .htaccess

如何通过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具有站点页眉/页脚。

它将404重定向到index.php。如何让它将所有请求重定向到php页面(index.php本身除外)?

此方法是否存在任何性能问题(不想使用框架)?

4 个答案:

答案 0 :(得分:20)

这是我使用的(并且已经使用了很长时间):

<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

答案 1 :(得分:8)

使用:


    
        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
    

网址示例: www.site.com/friend/josh/03-13-2012

所以$ params var值:

朋友/约什/ 2012年3月13日

只需要explode()“/”所以你得到带有参数的数组:

array(
0 => friend
1 => josh
2 => 03-13-2012 
)

答案 2 :(得分:4)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !index\.php$
RewriteRule .*\.php$ index.php?q=%{REQUEST_URI} [L]

将捕获所有以.php结尾的请求,这些请求不会指向以index.php结尾的文件,并将它们重定向到get参数中的index.php q

答案 3 :(得分:0)

要将所有不存在的请求重定向到 /index.php ,您还可以使用 ErrorDocument FallbackResource 指令。

尝试以下示例之一:

 ErrorDocument 404 /index.php


 FallbackResource /index.php

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

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

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