mod-rewrite通过一个index.php通道所有流量

时间:2012-12-21 18:49:49

标签: mod-rewrite frameworks

好的,我有这个mod重写(经过多次挖掘后获得:http://www.dynamicdrive.com/forums/showthread.php?51923-Pretty-URLs-with-basic-mod_rewrite-and-powerful-options-in-PHP):

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/loader.php$
RewriteCond %{REQUEST_URI} !^/loader.php/
RewriteRule ^(.*)$ loader.php/$1?%{QUERY_STRING} [L] 

它将所有流量重定向到我服务器的公共webroot中的loader.php。然后加载器相应地加载相应的php文件,非常标准的东西。

<?php
//load the definitions and functions
require_once '../www_private/functions/functions.php';

//If the user is looking for the index then the request will have been to a directory, add index.php accordingly
if ( is_dir(WEBROOT.$_SERVER['REQUEST_URI']) )
    {
        //check for a leading slash
        if ( substr($_SERVER['REQUEST_URI'], -1 == '/') )
            {
                $_SERVER['REQUEST_URI'] .= '/';
            }

        $_SERVER['REQUEST_URI'] .= 'index.php';
    }

//Now attempt to load the requested file.
require WEBROOT.$_SERVER['REQUEST_URI'];
?>

唯一的问题是它还会重定向css js和图像文件,导致一堆致命的错误......

有谁知道如何更改mod重写以允许非php文件跳过此重定向?

或//

我会更好地在images,css和js目录中添加另一个.htaccess文件来忽略父.htaccess吗?

2 个答案:

答案 0 :(得分:1)

尝试仅包含.php文件,如下所示:

RewriteEngine On
RewriteBase /

$ Add this line
RewriteCond %{REQUEST_URI} /\w+\.php

# Prevent loop
RewriteCond %{REQUEST_URI} !/loader\.php

RewriteRule ^(.*)$ loader.php/$1?%{QUERY_STRING} [L]

答案 1 :(得分:0)

通过向主.htacecss添加新规则

RewriteCond%{REQUEST_URI}!(gif | jpg | png | css | html | js)$

这只是添加了一个必须匹配的条件:如果文件扩展名不是其中任何一个......由于图像失败,重写规则将不会应用于它。