2012-06-04 6 views
0

Я пишу базовую небольшую CMS и использую RewriteRules для перенаправления каждого запроса на index.php, который затем анализирует остальную часть URI и требует/включает в себя разные php-файлы, чтобы собрать запрошенный сайт. Переписывание и синтаксический анализ URI, похоже, работают очень хорошо, однако, когда я пытаюсь включить php-файл, все выходные данные index.php стираются и ТОЛЬКО выводится вывод включенного php-файла.mod_rewrite завинчивание с 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

+0

я не вижу какого-либо содержания файлов в вашем посте. –

+2

'mod_rewrite' имеет ** ничего **, чтобы сделать с включает в себя – zerkms

+0

aldo: Я случайно отправил форму перед публикацией полного контента, извините. – Kodekan

ответ

1

Это происходит потому, что вы указали условие

RewriteCond %{REQUEST_FILENAME} !-f 

Это означает: не переписать, если файл существует. Просто удалите его

UPD:

Вам нужно положить

Options -MultiViews 

в начале вашего .htaccess

+0

Спасибо за ваш ответ, но это не помогло. www.example.com/htaccess_testing/red/ по-прежнему отображает только вывод red.php, а не комбинированный вывод index.php + included red.php – Kodekan

+0

@Kodekan: Я скопировал ваши файлы как есть без изменений и для 'http: // localhost/htaccess_testing/red /' Я получаю 'Ваш любимый цвет красный ' – zerkms

+0

@ Кодекан: я обновил свой ответ – zerkms