MVC& RewriteRule根本不起作用

时间:2016-02-05 16:07:05

标签: php .htaccess mod-rewrite model-view-controller

我已经建立了一个带有自制MVC结构的网站,并且.htaccess的漂亮网址根本不起作用。 我在我的网站的根目录中有这个“前端控制器”(index.php):

<?php
require_once('M/connect_sql.php');

if (!empty($_GET['page']) && is_file('C/'.$_GET['page'].'.php'))
{
    include 'C/'.$_GET['page'].'.php';
}
else
{
    include 'C/accueil.php';
}

$bdd = NULL;

C/是我的控制器文件夹。

我的网址示例: http://domain.com/?page=restaurants&city=paris&CP=75001

page参数用于我的控制器,&city=paris&CP=75001是POST变量。

我已经测试了一个简单的重写规则,它运行良好。 我尝试了几个Rewrite规则,但没有一个正在运行。

以下是上述网址的示例:

<IfModule mod_rewrite.c>    
    Options +FollowSymLinks
    RewriteEngine On

    RewriteRule ^(.+/)/([^/.]+)/([^/.]+)/?$ /?page=$1&city=$2&CP=$3 [NC,L]
</IfModule>

我在每个文件夹(根,控制器,视图)中放置了.htaccess,但我无法得到它。

自编辑以来的编辑:

这是我的新控制器,因为Entwicklerpages注意到一个安全漏洞。在此处找到此解决方案:http://kkovacs.eu/exploiting-web-development-worst-practices-file-inclusion

if ( isset($_REQUEST['page']) and ! is_null($_REQUEST['page']) )
{
$page = $_REQUEST['page'];
switch ($page) {
  case 'restaurant':
    include('C/restaurant.php');
    break;
  case 'restaurants':
    include('C/restaurants.php');
    break;

    }
}
else {
    include('C/accueil.php');
}

1 个答案:

答案 0 :(得分:0)

请注意实施中的安全漏洞! 让用户决定包含哪些php文件绝不是一个好主意。

include 'C/'.$_GET['page'].'.php';

https://www.owasp.org/index.php/Testing_for_Local_File_Inclusion

此外,我的网站的第二个想法。 PHP中的$_SERVER变量有一个名为PATH_INFO

的字段
$_SERVER['PATH_INFO']

如果您的网站被称为index.php / your / params /和/ other / data

您可以通过&#39; /&#39;将其拆分。并获取所有数据。 使用ModRewrite

也可能更容易一点

https://secure.php.net/manual/en/reserved.variables.server.php

我在自己的网站上使用它:http://www.entwicklerpages.de/Startseite.html(德语)