我有一个.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上这样做。
有什么想法吗?
答案 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()">
您的文件夹。