用php包含的mod_rewrite搞砸?

时间:2012-06-04 01:03:38

标签: php .htaccess

我正在编写一个基本的小CMS并使用RewriteRules将每个请求重定向到index.php,然后解析其余的URI并要求/包含不同的php文件以将所请求的站点放在一起。 重写和解析URI似乎工作正常,但是当我尝试包含一个php文件时,index.php的所有输出都被删除,并且只显示包含的php文件的输出。

我写了一个基本脚本来测试问题,但我找不到问题:

index.php

<?php
    if(isset($_GET['parameter_1']))
        $get_parameter_1 = $_GET['parameter_1'];

    if(isset($get_parameter_1))
    {
        echo "You favourite colour is ";
        if($get_parameter_1 == "red")
        {
            include('red.php');
        }
        else
        {
            echo "obviously not red.";
        }
    }
    else
    {
        echo "
            Parameter not set.
        ";
    }
?>

red.php

<?php
    echo "red";
?>

.htaccess

RewriteEngine on

RewriteBase /htaccess_testing/

RewriteRule \.(css|jpe?g|gif|png)$ - [L]
RewriteRule \.(php)$ - [L]

RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/htaccess_testing/$1/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/?$ /htaccess_testing/index.php?parameter_1=$1 [L]

当我请求www.example.com/htaccess_testing/时,它正确显示&#34;参数未设置。&#34;

当我要求www.example.com/htaccess_texting/blue/时,它会正确显示&#34;您最喜欢的颜色显然不是红色。&#34;

当我要求www.example.com/htaccess_testing/red/时,它只显示&#34;红色。&#34;而不是&#34;你最喜欢的颜色是红色。&#34;它应该做什么...

有人可以指出我的错误吗? 谢谢 / K

1 个答案:

答案 0 :(得分:1)

这是因为您已指定条件

RewriteCond %{REQUEST_FILENAME} !-f

这意味着:如果文件存在,请不要重写。只需删除它

<强> UPD

你需要把

Options -MultiViews

.htaccess

的开头