禁用对index.php的直接访问,但将每个URI重定向到index.php / URI

时间:2013-02-04 18:32:56

标签: php apache url-rewriting

我想禁用对/index.php的直接访问,但仍将其用作前端控制器(使用$_SERVER['PATH_INFO'])。含义:

URI                    EXPECTED ACTION
-----------------------------------------------
/index.php             raise 404
/                      use   /index.php/
/foo/bar               use   /index.php/foo/bar
/index.php/foo/bar     raise 404

当时我使用以下.htaccess文件:

RewriteEngine On
RewriteRule ^ index.php [QSA,L]

除了index.php之外,我不需要任何其他文件(制作API)。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

如果禁用对任何文件的访问,apache将限制它,如果文件没有访问权限,则禁用。您可以使用mod_rewrite伪造一个url以在URL中显示它index.php,但您需要对其他文件执行其他操作。

index.php -- not access
index.php/foo/bar -- no access
test.php -- have access
test.php/foo/bar -- you can fake it in url throw mod_rewrite and result will looks like as index.php/foo/bar

我希望如此帮助......

答案 1 :(得分:0)

嗯,我不确定这会有效,但值得一试?您可以为输入/index.php的任何人创建重写规则,并将其重写为服务器上不存在的html文件(foo.html或其他)。这应该在找不到文件时导致404错误,但仍然允许服务器在没有指定文件名时使用其默认行为来加载index.php。