我只需要将另一个域中的/login
页面重定向到我的主域名。
但是,我目前拥有的重定向过多。
我错过了什么?
htaccess的:
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^(.*)$ https://www.domain.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^otherdomain.com$ [NC]
# RewriteRule ^login https://www.domain.com/login [R=301,L] GIVES TOO MANY REDIRECTS
RewriteRule ^(.*)$ http://www.otherdomain.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteCond %{HTTPS} !=on
RewriteRule ^/? https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [L,QSA]
答案 0 :(得分:1)
好吧试试这个.htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?otherdomain\.com$ [NC]
RewriteRule ^login https://www.domain.com/login [R=301,L,NC]
RewriteCond %{HTTP_HOST} ^otherdomain\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [L,QSA]
并确保在新浏览器中进行测试,以避免浏览器的301缓存。
答案 1 :(得分:0)
我看到两个问题。
一个。
您的https重定向不会检查您是否已使用https。因此,在重定向到https://www.domain.com/login
后,您的https
规则就会启动。
通常情况下,您可以通过添加此条件(顶部的第一行)来更改第一条规则:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^(.*)$ https://www.domain.com/$1 [R=301,L]
但在我看来,您可以完全删除该规则,因为您已经使用此规则强制执行https:
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteCond %{HTTPS} !=on
RewriteRule ^/? https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
尝试:取消注释登录规则,并注释掉第一个https规则。
B中。第二个问题是otherdomain.com重定向到自己:
RewriteCond %{HTTP_HOST} ^otherdomain.com$ [NC]
# RewriteRule ^login https://www.domain.com/login [R=301,L] GIVES TOO MANY REDIRECTS
RewriteRule ^(.*)$ http://www.otherdomain.com/$1 [R=301,L]
一个条件仅适用于一个规则。现在,这导致其他域上的文件重定向到自己。
目前你需要注释掉这一行:
RewriteRule ^(.*)$ http://www.otherdomain.com/$1 [R=301,L]