Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache .htaccess问题,重定向除某些文件夹外的所有文件夹_Apache_.htaccess_Mod Rewrite_Redirect - Fatal编程技术网

Apache .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文件可见

我知道这里有很多这样的问题,还有其他的教程,我已经尝试了很多建议的解决方案,但是由于某些原因,它们对我来说不是100%有效。下面是我希望htaccess文件能够处理的事情列表

  • 如果未请求/admin/目录,则重定向到
  • 如果未请求/about-us.html文件,则重定向到
  • 如果请求未以以下格式结束,则重定向到:.jpg、.jpeg、.png、.gif、.css、.js
  • 将https://重定向到http://
  • 不允许热链接
  • 不允许目录索引列表(选项全部-索引)
  • 不允许.htaccess文件可见性
我遇到的最大问题是允许使用admin目录和about-us.html文件。它仍然重定向到站点的根目录。这是我到目前为止所拥有的

<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规则标记)