Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
.htaccess针对www问题和https问题的重定向_.htaccess_Redirect_Mod Rewrite - Fatal编程技术网

.htaccess针对www问题和https问题的重定向

.htaccess针对www问题和https问题的重定向,.htaccess,redirect,mod-rewrite,.htaccess,Redirect,Mod Rewrite,我想针对两种情况重定向: 非www https 我目前在我的.htaccess文件中使用以下内容: RewriteEngine on #RewriteCond %{HTTP_HOST} ^www\.egps\.org [NC] #RewriteRule ^(.*)$ https://website.org/$1 [L,R=301] RewriteCond %{SERVER_PORT} ^80$ RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_

我想针对两种情况重定向:

  • 非www
  • https
  • 我目前在我的
    .htaccess
    文件中使用以下内容:

    RewriteEngine on
    
    #RewriteCond %{HTTP_HOST} ^www\.egps\.org [NC]
    #RewriteRule ^(.*)$ https://website.org/$1 [L,R=301]
    
    RewriteCond %{SERVER_PORT} ^80$
    RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]  
    
    我注释掉了前两行,因为它们导致了问题。在搜索Stackoverflow的答案时,我找到了以下已接受的答案:

     RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
     RewriteCond %{HTTPS} !=on
     RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
     RewriteRule ^(.*)$ https://www.%1%{REQUEST_URI} [L,R=301,NE]
    
    有人能解释一下我是如何将此代码改为重定向到www而不是www的吗

    有人能把这些代码行实际上在说什么翻译成非常简单的语言吗?这是我到目前为止收集到的

  • 如果URL没有www
  • 如果URL前面没有https
  • 我不确定这个
  • 通过添加
    HTTPS://www.
    URL重写URL

  • 我建议实现两个单独的重定向规则。这样做的优点是,对于所有情况,它只会导致一个重定向,并且更易于读取/维护:

    RewriteEngine on
    
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [NE,R=301]
    
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}{REQUEST_URI} [NE,R=301]
    
    第一个条件提取主机名中不带前导
    www.
    的部分

    这些规则适用于http服务器主机配置,同样适用于动态配置文件(
    .htaccess
    样式文件)



    还有一个一般性提示:您应该始终希望将这些规则放在http服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些文件是出了名的容易出错,难以调试,而且它们确实降低了服务器的速度。只有在您无法控制主机配置的情况下(阅读:非常便宜的主机服务提供商),或者如果您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦),才提供它们作为最后一个选项。

    是的,现在可以了。谢谢。我将在哪里完成这些重定向?我使用cPanel,确实看到了重定向的链接,但不清楚如何输入您的建议。在我的.htaccess文件中,我还有以下内容:抱歉…无法编辑我的上述评论。我将在哪里完成这些重定向?我使用cPanel,确实看到了重定向的链接,但不清楚如何输入您的建议。我在显示维护页面或404页面等其他情况下使用.htaccess。我遇到了上述代码的问题。如果我键入example.org(不带www或https://),我会得到example.org%7b请求uri%7D的服务器DNS地址找不到。此外,如果我键入,我会收到相同的错误消息。如果有人输入http://或根本没有输入任何“前言”,我们是否需要额外的重定向来处理?如果在主机名之前输入协议方案,在使用浏览器时并不重要,浏览器总是使用协议方案,这只是不可见而已。有问题的策略,但这就是今天的实现。你指出的“逃逸百分比”让我很惊讶。。。这正是
    NE
    标志的作用:防止“特殊字符”转义。你真的确定你使用了
    NE
    标志吗,正如我在上面的代码中所显示的那样?我猜你是在复制规则的时候掉的。。。