我希望用户只能访问我的服务器index.php
(并且只能访问/
),而不能执行其他任何操作(如果文件有效则返回 403,如果文件无效则返回 404)。
我该怎么做?我尝试过以下解决方案 拒绝访问除 index.html apache 之外的所有文件
拒绝访问除 index.php 之外的所有文件,但允许通过 htaccess 文件中的“/”进行访问
但似乎并没有什么效果。
我的 .htaccess 文件是这样的,但它没有任何效果,我仍然可以访问我的服务器上的其他文件:
Order allow,deny
Deny from all
<FilesMatch index\.php>
Allow from all
</FilesMatch>
我不确定是否也需要在我的虚拟主机配置中定义任何内容?
我的虚拟主机文件是:
ServerAdmin webmaster@localhost
ServerName server.mydomain.com
ServerAlias server.mydomain.com
DocumentRoot /var/www/server.mydomain.com
DirectoryIndex index.php
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/server.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/server.mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
apache2ctl -S 输出是:
VirtualHost configuration:
*:443 server.mydomain.com (/etc/apache2/sites-enabled/server.mydomain.com-le-ssl.conf:2)
*:80 server.mydomain.com (/etc/apache2/sites-enabled/server.mydomain.com.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex ssl-stapling: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: using_defaults
Mutex ssl-stapling-refresh: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
答案1
恕我直言,你处理事情的方式是错误的,并且试图解决一个可以完全避免的问题:
只是不要将不属于在线的文件和目录存储在您的 DocumentRoot 中。
将目录的内容限制/var/www/server.example.com
为仅该index.php
文件,这样就不会出错。
这个问题被标记为历史阿帕奇-2.2版本和语法不适合当前的 Apache httpd 2.4 版本。 - 请参阅https://httpd.apache.org/docs/2.4/upgrading.html
当你确实想发布一些内容时,http://www.example.com/some-path/
请使用Alias
指令来完全公开不同的目录而不是创建子目录/var/www/server.example.com/some-path/
(例如 create /var/www//some-path
)并使用:
<VirtualHost *:80
ServerAdmin webmaster@localhost
ServerName server.mydomain.com
ServerAlias server.mydomain.com
DocumentRoot /var/www/server.example.com
Alias /some-path "/var/www/some-path"
<Directory "/var/www/some-path">
# add settings here, for example
Order deny,allow
Deny from all
Allow From 127.0.0.1
</Directory>
</VirtualHost>