htaccess 文件在 apache 2.2 中有效,但在 apache 2.4 中无效 - aws beanstalk 托管
Posted
技术标签:
【中文标题】htaccess 文件在 apache 2.2 中有效,但在 apache 2.4 中无效 - aws beanstalk 托管【英文标题】:htaccess file works in apache 2.2 but not in apache 2.4 - aws beanstalk hosted 【发布时间】:2021-12-17 06:53:03 【问题描述】:我需要让这个 .htaccess
文件在 Apache 2.4 中工作。看来 Apache 2.4 不喜欢
Order Allow,Deny
Deny from all
我改成
<FilesMatch "\.(htaccess|htpasswd|ini|psd|log|sh|crt|gitignore|md)$">
Require all denied
</FilesMatch>
到目前为止,我在实现它时看到了一些错误:
AH10244: invalid URI path (/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh) AH01797: client denied by server configuration: /var/www/html/
这是我试图在 Apache 2.4 中使用的.htaccess
文件。你能发现其他 Apache 2.4 不喜欢的东西吗?
Options -Indexes
<FilesMatch "\.(htaccess|htpasswd|ini|psd|log|sh|crt|gitignore|md)$">
Order Allow,Deny
Deny from all
</FilesMatch>
<Files 8fjfsuUhhhhh8/*>
deny from all
</Files>
<Files backups/*>
deny from all
</Files>
<Files stats/*>
deny from all
</Files>
<Files icons/*>
deny from all
</Files>
<Files error/*>
deny from all
</Files>
<Files logs/*>
deny from all
</Files>
<Files git/*>
deny from all
</Files>
<Files .git/*>
deny from all
</Files>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^blog/(.*)$ https://blog.mysite.com/$1 [R=301,NC,L]
# Old Site Redirects
RewriteRule ^retailers($|/$) /merchants/ [R=301,NC,L]
RewriteRule ^faqs($|/) /FAQ/ [R=301,NC,L]
RewriteRule ^contact($|/) /contact-us/ [R=301,NC,L]
RewriteRule ^login($|/) /customer-login/ [R=301,NC,L]
RewriteRule ^bank-vision($|/) /FAQ/ [R=301,NC,L]
# New Website Proxying
# Handle Request to index
RewriteCond %THE_REQUEST ^GET\ /\ .*
RewriteRule . http://mysite.com.s3-website.eu-west-2.amazonaws.com/ [P]
# Handle all the named pages
RewriteRule ^(merchants|how-it-works|shop-directory|contact-us|terms-of-use|privacy-policy|complaints-policy|careers|FAQ|error)($|/) http://mysite.com.s3-website.eu-west-2.amazonaws.com/$1$2 [P]
# Handle the various static elements
RewriteRule ^static/(.*)$ http://mysite.com.s3-website.eu-west-2.amazonaws.com/static/$1 [P]
RewriteRule ^page-data/(.*)$ http://mysite.com.s3-website.eu-west-2.amazonaws.com/page-data/$1 [P]
RewriteRule ^([^\/]*).js$ http://mysite.com.s3-website.eu-west-2.amazonaws.com/$1.js [P]
RewriteRule ^icons-(.*)/(.*)\.(png|jpg)$ http://mysite.com.s3-website.eu-west-2.amazonaws.com/icons-$1/$2.$3 [P]
# Handle request to homepage with get parameters
RewriteCond %THE_REQUEST ^GET\ /\?utm_source=([^\s&]+)
RewriteRule . http://mysite.com.s3-website.eu-west-2.amazonaws.com/ [P]
RewriteCond %THE_REQUEST ^GET\ /\?ref=([^\s&]+)
RewriteRule . http://mysite.com.s3-website.eu-west-2.amazonaws.com/ [P]
# Legacy Platform stuff
RewriteRule ^(frontend/process/process/components|admin-lf7/ui/ajax|frontend/ajax|8fjfsuUFks988/cron)($|/) - [L]
RewriteRule ^rt8aglCo7XfQOxxQH2mTDZw45675675675567P27da4t1T1yJIB5Be58ih /admin.php [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
RewriteCond %THE_REQUEST ^[A-Z]+\ /[^?\ ]*\.php[/?\ ]
RewriteRule .*\.php$ index.php [L]
</IfModule>
当我使用来自 AWS beanstalk 示例的 .htaccess
文件时,我可以看到该站点正常:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ index.php [L]
</IfModule>
【问题讨论】:
你的<Files>
指令看起来都不匹配任何东西?例如。你期望<Files logs/*>
匹配什么? <Files>
指令仅匹配 filenames,而不匹配文件路径。并且其中一些 mod_rewrite 指令看起来不像他们正在做你认为他们正在做的事情?我认为您可能遇到的一些问题只是服务器配置的差异,而不是 Apache 2.2 和 2.4 本身之间的差异。 (?) 您的原始指令假定 DirectoryIndex
设置正确,但后来的 .htaccess
文件避免了这样做的需要。
@MrWhite 我检查了<Files>
指令,它们与目录匹配,但与目录中的文件不匹配。我取出了所有涉及 s3 存储桶的 mod_rewrite 指令,并且能够让网站加载。
【参考方案1】:
Order Allow,Deny Deny from all
向后兼容 Apache 2.4,因此您应该可以使用旧配置。
错误AH10244: invalid URI path (/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh)
实际上是在尝试利用您的服务器,而您的 apache 正确地否认了这一点。
您是否正确测试了 FilesMatch ?喜欢尝试访问:yourpage.com/.htaccess?结果,您应该在日志中看到您的第二个“错误”AH01797: client denied by server configuration: /var/www/html/
,这意味着您的 .htaccess 和 FilesMatch 应该可以正常工作
【讨论】:
"Order Allow,Deny Deny from all
向后兼容 Apache 2.4" - 嗯,有点。这些指令已移至 mod_access_compat(以前已弃用)。此模块现在是“扩展”(与“基本”模块相反),因此默认情况下未启用。在 AWS 上,他们可能需要显式启用此模块(或将指令转换为使用 mod_authz_host - 这会更好)。
第二个“错误”表示对/var/www/html/
(看起来可能是文档根目录)的请求被阻止,而不是.htaccess
。这可能是由于新旧访问控制指令之间的冲突造成的。
@MrWhite 你是对的,我的回答是错误的,想删除它,但你的 cmets 是正确的。也许你可以重新发布你所有的 cmets 作为答案以上是关于htaccess 文件在 apache 2.2 中有效,但在 apache 2.4 中无效 - aws beanstalk 托管的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess for apache 2.2 不适用于 apache 2.4 vagrant 开发框
apache 2.2 (ubuntu) 不允许我通过.htaccess 设置php 错误报告?
mod_rewrite 的问题 // Apache 2.2 // OpenSUSE 11.3