.htaccess拒绝除索引

时间:2015-06-26 12:06:34

标签: php apache .htaccess

我有一个.htaccess文件,其中包含以下内容:

<IfModule mod_rewrite.c>  
    RewriteEngine on
    SetEnv HTTP_MOD_REWRITE on
    RewriteBase /wsproject/

    Options All -Indexes
    DirectoryIndex index.php

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
</IfModule>

我想要隐藏用户的所有内容:目录结构和私有文件,同时启用公共文件:* .js,* .html,* .css,* .swf,* .jpg等内容。我希望.php文件只能从文件系统访问,除了根目录中的index.php。

我只想通过HTTP提供请求,这些请求是用(抽象)MVC URL模式编写的,如:www.domain.com/lang/controller_name/action_name/arg1/arg2/././argn,正在被.htaccess重写,而public * .html,* .js ......等文件。

虽然Options All -Indexes隐藏了文件列表,但它不会阻止不受欢迎的请求,例如:www.domain.com/library/Bootstrap.php被提供。 删除/评论RewriteCond %{REQUEST_FILENAME} !-f可以解决这个问题,但在这种情况下,我的公共.html,.css,.js ......等文件都不会被提供。

我试图为除了index.php之外的每个php文件应用Deny,但我总是收到500内部服务器错误消息。我在windows上的localhost上这样做。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

除了声明除了现有文件之外的所有文件都应该定向到index.php,您可以说除了* .js,* .html,* .css,* .swf,* .jpg之外的所有内容都应该指向索引。 PHP。

这与拒绝完全相同,因为你没有给出禁止回复。虽然在这种情况下您不会提供有关哪些文件存在与否的任何信息,但我认为这是一个更好的解决方案。

<IfModule mod_rewrite.c>  
    RewriteEngine on
    SetEnv HTTP_MOD_REWRITE on
    RewriteBase /wsproject/

    Options All -Indexes
    DirectoryIndex index.php

    RewriteRule \.(js|html|css|swf|jpg)(\?|$) - [QSA,L]
    RewriteRule ^index.php(\?|$) - [QSA,L]
    RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
</IfModule>

请注意,重写-表示根本不会重写。

答案 1 :(得分:1)

我建议使用chmod命令来修改文件的读/写/可执行性值,而不是(或者可能还有......)编辑.htaccess文件。

chmod chmod 644可以找到chmod 755的相对简洁明了的解释,但通常最简单的方法是<VirtualHost *:80> ServerAdmin example1@example1.com DocumentRoot "/opt/sites/example1/" ServerName www.example1.com ErrorLog logs/example1-error_log CustomLog logs/example1-access_log common ProxyRequests off ProxyPreserveHost on ProxyPass /contact.html http://localhost:8081/Servlet/lmdd ProxyPassReverse /contact.html http://localhost:8081/Servlet/lmdd </VirtualHost> 您的文件和<form action="${pageContext.request.contextPath}/sendFormLMDD" method="post" id="updateForm" onsubmit="return validateForm()"> 您的文件夹。