好的,一个接一个:
不允许 .htaccess 文件可见
您的 Files 指令似乎没问题,但是,它应该始终放在服务器范围的配置文件中,而不是放在 .htaccess 本身中。您应该考虑隐藏所有以点开头的文件。此外,“全部满足”确保即使用户通过 HTTP 身份验证方案进行身份验证,这些文件也无法访问。
<Files ~ "^\.">
Order allow,deny
Deny from all
Satisfy all
</Files>
不允许目录索引列表(选项 ALL - 索引)
您只需要“选项-索引”
不允许盗链
检查推荐人:
RewriteCond %{HTTP_REFERER} !^($|https?://(www\.)?example\.net)
RewriteRule \.(gif|jpe?g|png|css|js)$ - [R=403]
如果referer不为空且不包含example.net的url,则发送http/1.0 403 Forbidden。请记住,您不能依赖引用标头。它可能不存在,在这种情况下,您必须允许访问不要阻止您自己的页面,如果给定它可能是错误的,但是您可能会争辩说这是访问者的责任。
将 http:// 重定向到 https://
通常应该反过来,通过使用 ssl/tls 确保访问者的安全。但是你在这里:
RewriteCond %{HTTPS} =on
RewriteRule ^/?(.*) http://%{SERVER_NAME}/$1 [R=301,L]
最好适当配置虚拟主机。
如果不请求 /admin/ 目录,则重定向到 http://example.net/
如果不请求 /about-us.html 文件,则重定向到 http://example.net/
如果请求不以以下方式结束,则重定向到 http://example.net/:.jpg、.jpeg、.png、.gif、.css、.js
最简单的方法是使用重写链并在重定向所有剩余的之前允许特殊请求(用 [L] als last 规则标记):
RewriteRule ^/?admin/ - [L]
RewriteRule ^/?about-us\.html - [L]
RewriteRule \.(jpe?g|png|gif|css|js) - [L]
rewriteRule ^/?(.*) http://example.net/$1 [R=302]
(顺便说一句:如果您已将页面移动到新 url,请始终使用 R=301(永久移动)作为重定向代码,以便 google 和其他搜索引擎不会将两个 url 作为重复内容处理。)
并使用 RewriteBase 设置前面的 Base 目录(在您的情况下只是“/”)。
您的完整 .htaccess 文件如下所示:
Options -Indexes
<Files ~ "^\.">
Order allow,deny
Deny from all
Satisfy all
</Files>
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_REFERER} !^($|https?://(www\.)?example\.net)
RewriteRule \.(gif|jpe?g|png|css|js)$ - [R=403]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*) http://%{SERVER_NAME}/$1 [R=301,L]
RewriteRule ^admin/ - [L]
RewriteRule ^about-us\.html - [L]
RewriteRule \.(jpe?g|png|gif|css|js) - [L]
rewriteRule ^(.*) http://example.net/$1 [R=302]
编辑(由于理解错误):
以上示例适用于外部重定向到不同域(此处为 example.net)。如果只有同一域上的本地重定向(例如到“/”),您需要将最后一条规则替换为:
Rewriterule ^$ - [L]
RewriteRule ^.* / [R=302,L]
防止重定向循环。