2016-02-05 3 views
0

Я создал веб-сайт с самодельной структурой MVC и симпатичными URL-адресами с .htaccess. У меня есть этот «фронт-контроллер» (index.php) в корне моего сайта:MVC & RewriteRule совсем не работает

<?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 переменные.

Я проверил простое правило перезаписи MVC и работает хорошо. Я пробовал несколько правил перезаписи, но никто не работает.

Вот пример для приведенного выше URL:

<IfModule mod_rewrite.c>  
    Options +FollowSymLinks 
    RewriteEngine On 

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

Я разместил .htaccess в каждой папке (корень, контроллер, взгляды), но я не могу получить его.

EDIT SINCE ОТВЕТА:

Вот мой новый контроллер, так как 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'); 
} 

ответ

0

Осознайте дыру в безопасности в вашей реализации! Никогда не рекомендуется указывать, какие файлы php включены.

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

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

Кроме того, вторая идея с моего сайта. $_SERVER переменной в PHP есть поле под названием PATH_INFO

$_SERVER['PATH_INFO'] 

Если ваш сайт называется index.php/вашим/PARAMS/и/другие/данных

Вы можете разделить его на «/» и получить все ваши данные. Кроме того, это может быть немного проще, чтобы сделать его фантазии с ModRewrite

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

Я использую это на моем сайте: http://www.entwicklerpages.de/Startseite.html (немецкий)

+0

Большое спасибо Entwicklerpages за время вы взяли, чтобы ответить. Это действительно помогает! Мне удалось сделать RewriteRule. Для дыры в безопасности я обновил сообщение с найденным решением. Считаете ли вы, что сейчас это безопаснее? – Damien

Смежные вопросы