Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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非www到www和http到https重定向_Apache_.htaccess_Redirect_Mod Rewrite - Fatal编程技术网

Apache .htaccess非www到www和http到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

由于某些原因,我的重定向不起作用。我只想让非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 %{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