.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_
.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的吗
有人能把这些代码行实际上在说什么翻译成非常简单的语言吗?这是我到目前为止收集到的
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
标志吗,正如我在上面的代码中所显示的那样?我猜你是在复制规则的时候掉的。。。