我的MVC php应用程序有以下结构。
/
/Models/
/Views/
/Content/
/libs/
index.php <-- Controllers
admin.php
blog.php
基本上我希望人们允许在根目录中访问.php文件。 (index.php,admin.php)
例如,只允许访问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 :(得分:1)
由于一些奇怪的原因,人们可以访问URL,如index.php / index.php / index.php
这不是一个BUG,它是一个特征;)
这实际上是一个apache功能。 Apache允许脚本名称后面的附加路径信息。在PHP中你可以从$ _SERVER ['PATH_INFO']获取这个值 URL index.php / a / b将运行脚本index.php,您将在PATH_INFO中获得“a / b”
如何禁用此类网址
要禁用此类网址,您需要在apache配置中禁用“AcceptPathInfo”
<Files "*.php">
AcceptPathInfo Off
</Files>
您可以在http://httpd.apache.org/docs/2.2/mod/core.html#acceptpathinfo
中找到有关AcceptPathInfo的更多信息答案 1 :(得分: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
中找到它,当然它在那里不存在。
答案 2 :(得分: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]