Apache .htaccess非www到www和http到https重定向
由于某些原因,我的重定向不起作用。我只想让非www转到www,非https转到https。这是我得到的。这是我的 编辑:这是我的全部文件Apache .htaccess非www到www和http到https重定向,apache,.htaccess,redirect,mod-rewrite,Apache,.htaccess,Redirect,Mod Rewrite,由于某些原因,我的重定向不起作用。我只想让非www转到www,非https转到https。这是我得到的。这是我的 编辑:这是我的全部文件 # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{HTTPS} Off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteCond %{H
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} Off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} blog.example.com
RewriteRule ^(.*)$ https://www.example.com/blog/$1 [R=permanent,L]
RewriteCond %{HTTP_HOST} ^example.com/blog/$ [NC]
RewriteRule (.*) https://www.exmaple.com/blog/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.example.com/blog/$ [NC]
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule (.*) https://www.example.com/blog/$1 [R=301,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
#开始WordPress
重新启动发动机
重写基/
重写条件%{HTTPS}关闭
重写规则^https://%{HTTP_HOST}%{REQUEST_URI}[R=301,L]
重写cond%{HTTP_HOST}blog.example.com
重写规则^(.*)$https://www.example.com/blog/$1[R=永久性,L]
RewriteCond%{HTTP_HOST}^example.com/blog/$[NC]
重写规则(.*)https://www.exmaple.com/blog/$1[R=301,L]
重写cond%{HTTP_HOST}^www.example.com/blog/$[NC]
重写cond%{HTTP:X-Forwarded-Proto}=https
重写规则(.*)https://www.example.com/blog/$1[R=301,L]
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress
我只想让非www转到www,非https转到https
您最初拥有的非常接近,但这取决于SSL证书的管理方式。如果SSL由前端代理管理(例如Cloudflare flexible SSL/FREE选项),那么它可能是正常的。但是,如果SSL证书直接安装在服务器上,则可能不会
尝试以下方法:
# Non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.%{HTTP_HOST}/$1 [R,L]
# Non-SSL to SSL
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R,L]
# Redirect blog subdomain to main domain (required?)
RewriteCond %{HTTP_HOST} ^(www\.)?blog\.example\.com
RewriteRule (.*) https://www.example.com/blog/$1 [R=301,L]
# Non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.%{HTTP_HOST}/$1 [R=301,L]
# Non-SSL to SSL
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
这假设您只有example.com
和www.example.com
,没有其他子域。但是,在您编辑的代码中,您引用了一个博客
子域-如果您首先包含博客
重定向,这就可以了
这当前是一个临时(302)重定向。只有在确定工作正常时,才将R
更改为R=301
(永久)
在测试之前,请确保您的浏览器捕获是清晰的
总结
完整的代码如下所示:
# Non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.%{HTTP_HOST}/$1 [R,L]
# Non-SSL to SSL
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R,L]
# Redirect blog subdomain to main domain (required?)
RewriteCond %{HTTP_HOST} ^(www\.)?blog\.example\.com
RewriteRule (.*) https://www.example.com/blog/$1 [R=301,L]
# Non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.%{HTTP_HOST}/$1 [R=301,L]
# Non-SSL to SSL
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
#将博客子域重定向到主域(必需?)
重写cond%{HTTP_HOST}^(www\)?blog\.example\.com
重写规则(.*)https://www.example.com/blog/$1[R=301,L]
#非www到www
重写cond%{HTTP_HOST}^www\。
重写规则(.*)https://www.%{HTTP_HOST}/$1[R=301,L]
#非SSL到SSL
重写条件%{HTTPS}关闭
重写规则(.*)https://%{HTTP_HOST}/$1[R=301,L]
#开始WordPress
重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress
最好不要在#BEGIN WordPress
块之间进行编辑,以避免自定义代码被WordPress覆盖
在代码中只包含一次
RewriteBase
指令(只有最后一个实例才能执行任何操作)。目前,RewriteBase
指令实际上没有做任何事情,因为您没有相对路径替换。什么URL没有重定向?任何以http开头或开头没有www的内容。我已经对它进行了测试,如果它不是脚本,那么这是另一个问题。通过在.htaccess
上添加一些垃圾(随机)文本,验证您的.htaccess
是否启用了.htaccess
,并查看当您在浏览器中访问页面时,它是否生成500(内部服务器)错误。500错误意味着.htaccess已启用。这是您完整的.htaccess
文件吗?好的,我已经添加了文件的其余部分@user82217。非常感谢您将其组合在一起。你提出了一个关于代理的好观点。我们有一个反向代理设置,这样我们就可以在windows服务器(linux服务器上)的子目录中有一个wordpress博客。所以我不确定这是否会干扰。不管怎样,我备份了.htaccess文件并添加到了您的示例中。发生的情况如下:1)如果我转到一个非http url,它会将我重定向到windows服务器上的404页面;2)如果我尝试使用https和非www,它会做同样的事情。我想你可能对SSL的设置方式有所了解,因为我没有考虑到这一点。因为你得到的是404,可能是重定向到错误的URL?你在请求什么URL,你被重定向到什么URL,你想要的URL是什么?我尝试了两种类型。1) -它已重定向到(windows主机)。第二个(2)-重定向到@user82217