Apache .htaccess问题,重定向除某些文件夹外的所有文件夹
我知道这里有很多这样的问题,还有其他的教程,我已经尝试了很多建议的解决方案,但是由于某些原因,它们对我来说不是100%有效。下面是我希望htaccess文件能够处理的事情列表Apache .htaccess问题,重定向除某些文件夹外的所有文件夹,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我知道这里有很多这样的问题,还有其他的教程,我已经尝试了很多建议的解决方案,但是由于某些原因,它们对我来说不是100%有效。下面是我希望htaccess文件能够处理的事情列表 如果未请求/admin/目录,则重定向到 如果未请求/about-us.html文件,则重定向到 如果请求未以以下格式结束,则重定向到:.jpg、.jpeg、.png、.gif、.css、.js 将https://重定向到http:// 不允许热链接 不允许目录索引列表(选项全部-索引) 不允许.htaccess文件可见
- 如果未请求/admin/目录,则重定向到
- 如果未请求/about-us.html文件,则重定向到
- 如果请求未以以下格式结束,则重定向到:.jpg、.jpeg、.png、.gif、.css、.js
- 将https://重定向到http://
- 不允许热链接
- 不允许目录索引列表(选项全部-索引)
- 不允许.htaccess文件可见性
<Files .htaccess>
order allow,deny
deny from all
</Files>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/about-us.html$
RewriteCond %{REQUEST_URI} !^/admin/*$
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_URI} !\.(gif|jpeg|jpg|png|css|js)$
RewriteRule (.*) / [R=302]
Options All -Indexes
命令允许,拒绝
全盘否定
重新启动发动机
重写cond%{REQUEST_URI}^/about-us.html$
重写cond%{REQUEST_URI}^/管理员/*$
重写cond%{REQUEST_URI}^/$
重写条件%{REQUEST\u URI}!\。(gif | jpeg | jpg | png | css | js)$
重写规则(.*)/[R=302]
选项所有-索引
这件事我哪里做错了?提前感谢您的帮助和见解。好的,一个接一个:
不允许.htaccess文件可见性
您的Files指令似乎没有问题,但是,它应该始终放在服务器范围的配置文件中,而不是放在.htaccess本身中。你应该考虑从一个点开始隐藏所有文件。此外,“满足所有”确保即使用户通过HTTP身份验证方案进行身份验证,这些文件也不可访问
<Files ~ "^\.">
Order allow,deny
Deny from all
Satisfy all
</Files>
如果referer不为空且不包含example.net的url,则发送http/1.0 403。请记住,您不能依赖referer标题。它可能不在那里,在这种情况下,你必须允许访问不要阻止你自己的页面,如果给定它可能是错误的,但是你可能会争辩说这是访问者的责任
将http://重定向到https://
通常情况下应该是相反的,通过使用ssl/tls来确保访问者的安全。但你在这里:
RewriteCond %{HTTPS} =on
RewriteRule ^/?(.*) http://%{SERVER_NAME}/$1 [R=301,L]
更好的做法是适当地配置虚拟主机
如果未请求/admin/目录,则重定向到如果未请求/about-us.html文件,则重定向到
如果请求未以以下格式结束,则重定向到:.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(永久移动)作为重定向代码,这样谷歌和其他搜索引擎就不会将这两个url作为重复内容处理。)
并使用RewriteBase设置前面的基本目录(在您的示例中,只需“/”)
您的完整.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]
防止重定向循环。好的,一个接一个:
不允许.htaccess文件可见性
您的Files指令似乎没有问题,但是,它应该始终放在服务器范围的配置文件中,而不是放在.htaccess本身中。你应该考虑从一个点开始隐藏所有文件。此外,“满足所有”确保即使用户通过HTTP身份验证方案进行身份验证,这些文件也不可访问
<Files ~ "^\.">
Order allow,deny
Deny from all
Satisfy all
</Files>
如果referer不为空且不包含example.net的url,则发送http/1.0 403。请记住,您不能依赖referer标题。它可能不在那里,在这种情况下,你必须允许访问不要阻止你自己的页面,如果给定它可能是错误的,但是你可能会争辩说这是访问者的责任
将http://重定向到https://
通常情况下应该是相反的,通过使用ssl/tls来确保访问者的安全。但你在这里:
RewriteCond %{HTTPS} =on
RewriteRule ^/?(.*) http://%{SERVER_NAME}/$1 [R=301,L]
更好的做法是适当地配置虚拟主机
如果未请求/admin/目录,则重定向到如果未请求/about-us.html文件,则重定向到
如果请求未以以下格式结束,则重定向到:.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(永久移动)作为重定向代码,这样谷歌和其他搜索引擎就不会将这两个url作为重复内容处理。)
并使用RewriteBase设置前面的基本目录(在您的示例中,只需“/”)
您的完整.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]
防止重定向循环。好的,一个接一个:
不允许.htaccess文件可见性
您的Files指令似乎没有问题,但是,它应该始终放在服务器范围的配置文件中,而不是放在.htaccess本身中。你应该考虑从一个点开始隐藏所有文件。此外,“满足所有”确保即使用户通过HTTP身份验证方案进行身份验证,这些文件也不可访问
<Files ~ "^\.">
Order allow,deny
Deny from all
Satisfy all
</Files>
如果referer不为空且不包含example.net的url,则发送http/1.0 403。请记住,您不能依赖referer标题。它可能不在那里,在这种情况下,你必须允许访问不要阻止你自己的页面,如果给定它可能是错误的,但是你可能会争辩说这是访问者的责任
将http://重定向到https://
通常情况下应该是相反的,通过使用ssl/tls来确保访问者的安全。但你在这里:
RewriteCond %{HTTPS} =on
RewriteRule ^/?(.*) http://%{SERVER_NAME}/$1 [R=301,L]
更好的做法是适当地配置虚拟主机
如果未请求/admin/目录,则重定向到如果未请求/about-us.html文件,则重定向到
如果请求未以以下格式结束,则重定向到:.jpg、.jpeg、.png、.gif、.css、.js 最简单的方法是使用重写链并允许特殊请求(用[L]als last规则标记)