簡體   English   中英

我可以在 HTACCESS 中使用 IF 語句,以便我可以 301 僅重定向特定域(對於單個 docroot 上的多域)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM