[英].htaccess deny php files from all except index
我有一个具有以下内容的.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服务请求,而HTTP是使用(抽象的)MVC URL模式编写的,例如: www.domain.com/lang/controller_name/action_name/arg1/arg2/././argn
,这些文件正在由.htaccess重写以及公共* .html,*。js ... etc文件。
虽然Options All -Indexes
隐藏了文件列表,但它不会阻止不受欢迎的请求,例如: www.domain.com/library/Bootstrap.php
。 删除/注释掉RewriteCond %{REQUEST_FILENAME} !-f
可以解决此问题,但是在这种情况下,不会提供我的公共.html,.css,.js ... etc文件。
我尝试对所有除index.php以外的php文件都应用Deny,但是我总是收到500条内部服务器错误消息。 我在Windows的localhost上执行此操作。
有任何想法吗?
您可以说除了* .js,*。html,*。css,*。swf,*。jpg以外的所有文件都应定向到index.php,而不是指出所有现有文件都应定向到index.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>
请注意,重写为-
表示完全不进行重写。
建议不要使用chmod
命令来修改.htaccess文件,而建议使用chmod
命令来修改文件的读/写/可执行性值。
可以在此处接受的答案中找到有关chmod
是/做的相对简洁明了的解释,但通常最简单的方法是对文件chmod 644
和文件夹chmod 755
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.