我需要将不是www或https的所有传入流量重定向到www和https。 一个问题是尝试添加另一条规则,该规则将处理曾经位于rootdomain.com/blog/rest-of-url-title的所有流量,并将其发送到子域https://blog.rootdomain.com/rest-of-url-title
这是我在根域htaccess中拥有的
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^/blog/(.*)$ https://blog.rootdomain.com/$1 [R=302,L]
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=302]
</IfModule>
然后在博客子域目录htaccess中,我具有此功能(将任何非https重定向到https,其余基于Wordpress)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
当尝试访问任何rootroot.com/blog/rest-of-url-title的URL时,它将重定向到 https://www.rootdomain.com/index.php
它不会重定向到Blog子域,而是转到www,因为www的URL标题不存在,所以我得到404。
答案 0 :(得分:0)
我必须使用mod_alias redirectmatch才能使其按我想要的方式工作
RedirectMatch 302 ^/blog/(.*)$ https://blog.rootdomain.com/$1
这很奇怪,因为我在根目录下原始htaccess中的mod_rewrite行具有以下内容:
RewriteRule ^blog/(.*) https://blog.rootdomain.com/$1 [R=302,L]
在该特定服务器上不起作用,但在我测试过的任何其他服务器上都能正常工作。也许是因为子域/目录映射问题?
无论如何,我知道将mod_rewrite和mod_alias混合使用并不是一种好习惯,这个最终结果对我有用:
RedirectMatch 302 ^/blog/(.*)$ https://blog.skodaminotti.com/$1
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=302]
</IfModule>
如果有人知道改写为什么行不通的话,仍然会很乐意。