【问题标题】:mod_rewrite screwing with php include?mod_rewrite 搞砸了 php 包括?
【发布时间】:2012-06-08 04:04:50
【问题描述】:

我正在编写一个基本的小型 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/ 时,它正确显示“参数未设置”。

当我请求 www.example.com/htaccess_texting/blue/ 时,它正确显示“您最喜欢的颜色显然不是红色。”

当我请求 www.example.com/htaccess_testing/red/ 时,它只显示“红色”。而不是“你最喜欢的颜色是红色”。这是它应该做的......

谁能指出我的错误? 谢谢 /K

【问题讨论】:

  • 我没有看到您帖子中的任何文件内容。
  • mod_rewrite 与包含无关
  • aldo:我在发布完整内容之前不小心发送了表单,抱歉。
  • zerkms:我不知道是什么导致了这种行为。我只怀疑它是由我的 htaccess 文件以某种方式引起的。找到行为的原因是我在这里发布我的问题的原因......

标签: php .htaccess


【解决方案1】:

这是因为你已经指定了条件

RewriteCond %{REQUEST_FILENAME} !-f

意思是:如果文件存在就不要重写。删除它

UPD

你需要放

Options -MultiViews

.htaccess的开头

【讨论】:

  • 感谢您的回答,但没有帮助。 www.example.com/htaccess_testing/red/ 仍然只显示 red.php 的输出,而不是 index.php + include red.php 的组合输出
  • @Kodekan:我按原样复制粘贴了您的文件,没有修改,对于http://localhost/htaccess_testing/red/,我得到You favourite colour is red
  • 感谢 Options -MultiViews 成功了。 (我只是希望我知道为什么会这样:))
  • @Kodekan:+MultiViews 选项要求 apache 猜测文件的扩展名。并且只要文件存在 - 无论 mod_rewrite 规则如何,apache 都会运行它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
  • 2010-11-26
  • 2011-08-09
  • 1970-01-01
相关资源
最近更新 更多