在将白名单文件扩展名模式与apache配置一起使用时,我无法使apache提供rest api调用。我将apache配置为拒绝所有文件扩展名。这样可以防止默认扩展名未知的文件。到目前为止,它的工作完全符合预期。 Apache提供php,html,json等...,并且apache拒绝unknow扩展名(.sh,.sql)。
例如: 这些有效:(返回200,并有响应)
那些不起作用:(返回403(客户端被服务器配置拒绝))
到目前为止,太好了。但是当我点击https://vhosttest.test.com/company_api/1.0.0/object/时,它还会返回403(服务器配置拒绝了客户端) 我找不到原因,因为重写规则应该重定向到允许的php文件。
有我的配置:
1- /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
Options None
AllowOverride None
Order deny,allow
Deny from all
</Directory>
2-对于/ var / www / html / VHOSTNAME下/etc/httpd/conf/httpd.conf中的每个虚拟主机,配置为:
<VirtualHost *:443>
ServerAdmin webmaster@dummy-host.example.com
ServerName vhosttest.test.com
ServerAlias www.vhosttest.test.com
SSLEngine On
SSLCertificateFile /path/ssl_certificate.crt
SSLCertificateKeyFile /path/privateKey.key
SSLCertificateChainFile /path/IntermediateCA.crt
DocumentRoot /var/www/html/vhosttest
# -------------------------------------------------------------
RedirectMatch ^/$ index.php
<Directory /var/www/html/vhosttest/>
Options None
AllowOverride All
Order allow,deny
deny from all
<FilesMatch "\.(png|jpg|gif|css|php|html|js|json)$">
Order deny,allow
Allow from all
</FilesMatch>
</Directory>
# -------------------------------------------------------------
ServerSignature Off
ErrorLog /logpath/vhosttest/error_log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /logpath/vhosttest/error_log combined
</VirtualHost>
3-最后,对于每个虚拟主机,我们还有一个.htaccess文件,用于使用以下配置的REST API:
<IfModule mod_headers.c>
Header set Cache-Control "no-cache, no-store"
Header set Pragma "no-cache"
Header set Expires 0
</IfModule>
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^/?([company-]*)company_api/ company_rest_api.php [L,QSA]
RewriteRule ^/?([company-]*)company-api/ company_rest_api.php [L,QSA]
RewriteRule ^/?([company-]*)company2-api/ company2_rest_api.php [L,QSA]
RewriteRule ^/?([company-]*)company3-api/ company3_rest_api.php [L,QSA]
</IfModule>
我希望apache能够对服务器https://vhosttest.test.com/company_api/1.0.0/object/进行调用,而不会出现403错误。