[英]Can I use an IF statement in an HTACCESS so that I can 301 redirect only specific domain (for multidomains on single docroot)
我運行一個帶有雲/網絡服務的服務器,我的用戶可以通過他們的子域訪問他們的帳戶:
我的主站點: www.myservice.com
用戶 A:usera.myservice.com
用戶 B:userb.myservice.com
最近我添加了用戶使用自己的域的選項。 這通過虛擬服務器效果很好。 因此,現在如果有人訪問www.usera.com ,他們會在瀏覽器中看到“www.usera.com”,但實際上他們使用的是 usera.myservice.com (我認為這是所謂的“單個 docroot 上的多域”)
到目前為止,一切都很好。
我的問題是:用戶 A 已經有一個站點,並且希望永久重定向以使舊 URL 指向新的。 但是,當我在根文件夾中的 htaccess 中實現此功能時,規則適用於所有域,包括 myservice.com。
我想實現 301 重定向,但僅限於選定的域。
我想我很接近,但是......這不起作用。
<If "%{HTTP_HOST} =~ /^usera.com\./">
Redirect 301 /oldpath/product1 https://usera.com/newpath/product1
Redirect 301 /newsartciles/article1 https://usera.com/read/article1
//etc
</If>
因此:如果 HTTP_HOST 包含“usera.com”(在“usera.com”前后有“通配符”),那么(並且僅在那時)在該 IF 語句中應用所有 376 重定向 301 規則。
誰能幫我嗎? 我怎樣才能做到這一點?
沒關系! 我發現我不必使用任何通配符。 在我的情況下,以下工作完美:
<If "%{HTTP_HOST} == 'usera.com'">
Redirect 301 /oldpath/product1 https://usera.com/newpath/product1
Redirect 301 /newsartciles/article1 https://usera.com/read/article1
//etc
</If>
在一些 http->https 和 www->non-www 規則之后,我實現了這個 if 語句:
#first: www to non-www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
#then: force https
RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
#and then
<If "%{HTTP_HOST} == 'usera.com'">
Redirect 301 /oldpath/product1 https://usera.com/newpath/product1
Redirect 301 /newsartciles/article1 https://usera.com/read/article1
//etc
</If>
有了這個,我讓它像我希望的那樣工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.