2014-01-21 4 views
1

У меня есть следующая структура для моего приложения MVC php.Правила перезаписи кода PHP

/ 

/Models/ 
/Views/ 
/Content/ 
/libs/ 

index.php <-- Controllers 
admin.php 
blog.php 

В основном я хочу, чтобы люди разрешали файлы .php доступа в корневой каталог. (Index.php, admin.php)

Например позволяет Acces только index.php

<Files *.php> 
Order Deny,Allow 
Deny from all 
Allow from 127.0.0.1 
</Files> 

<Files index.php> 
Order Allow,Deny 
Allow from all 
</Files> 

по непонятной причине люди могут получить доступ URL, как index.php/index.php/index.php

или blog.php/test/будет отображать выходную страницу, но она не отображается должным образом.

Почему это происходит?

ответ

0

Basically I want people to allow acces .php files in the root directory. (index.php, admin.php)

Вместо <Files> директивы использование mod_rewrite для более точного управления:

RewriteEngine On 

RewriteCond %{REQUEST_URI} !^/(index|admin)\.php$ [NC] 
RewriteCond %{THE_REQUEST} \.php[\s?/] [NC] 
RewriteRule^- [F,NC] 
+0

Хорошо, что для белых списков разрешены php-файлы, но люди все еще могут перейти к index.php/{ничего здесь} или admin.php/{ничего) или даже индексировать.php ////// – user3030473

+0

Не имеет значения, что они все равно будут запускать код на index.php или admin.php, нет проблем с безопасностью. Если вы беспокоитесь о том, что люди действительно это делают, и это неверно использует абсолютные пути в вашем html. – Pitchinnate

+0

Или если вы действительно обеспокоены этим, используйте переадресацию вместо перезаписи, если они не находятся в одном из белых списков. – Pitchinnate

0

/index.php/index.php/index.php не является допустимым путем. Корень /index.php по-прежнему является тем, который выполняется сервером. Однако браузер не достаточно умен, чтобы знать это, поэтому, если вы используете пути к файлам css и изображения относительно, они теперь ищут их в неправильных местах, поэтому ваша страница неправильно отображается.

Так, насколько сервер обеспокоен www.test.com/index.php/index.php/index.php такой же, как вызов www.test.com/index.php

Но для браузера, если у вас это в заголовке HTML <link href="css/style.css" rel="stylesheet" type="text/css"> он теперь пытается найти его в www.test.com/index.php/index.php/css/style.css и, конечно, это Безразлично Там нет.

+0

Хорошо, так что будет решением? Я хочу что-то после http: //site/*.php/ для перенаправления на http: //site/index.php – user3030473

+0

Используйте mod_rewrite, как предложил anubhava. – Pitchinnate

1

По непонятным причинам люди могут получить доступ URL, как index.php/index.php/индекс .php

Это не ОШИБКА, это ХАРАКТЕР;)

Это на самом деле функция apache. Apache позволяет добавлять дополнительную информацию о пути после имени сценария. В PHP вы можете acesss это значение из $ _SERVER [ 'PATH_INFO'] URL, index.php/а/б будет запускать скрипт index.php и вы получите "A/B" в PATH_INFO

Как отключить этот тип URL

чтобы отключить такой URL нужно отключить «AcceptPathInfo» в конфигурации апача

<Files "*.php"> 
    AcceptPathInfo Off 
</Files> 

вы можете узнать больше о AcceptPathInfo в http://httpd.apache.org/docs/2.2/mod/core.html#acceptpathinfo

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