簡體   English   中英

映射文件中特定域的mod_rewrite

[英]mod_rewrite for specific domains in a mappings file

我有一堆域,我想去一個域,但是該域的各個部分。

# this is what I currently have
RewriteEngine On
RewriteCond %{HTTP_HOST} ^.*\.?foo\.com$ [NC]
RewriteRule ^.*$ ${domainmappings:www.foo.com} [L,R=301]

# rewrite map file
www.foo.com www.domain.com/domain/foo.com.php
www.bar.com www.domain.com/domain/bar.com.php
www.baz.com www.domain.com/other/baz.php.foo

問題是我不想讓每個域都成為RewriteCond的一部分。 我試過了

RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule (.*) http://%1/$1 [R=301,L]

但這將對每個域都適用。 我只希望重定向映射文件中的域,然后如果它與映射文件中的任何域都不匹配,則繼續進行其他重寫。

您走在正確的軌道上。 您要做的就是在地圖上使用管道運算符,以便獲得全部內容。

RewriteCond ${domainmappings:%{HTTP_HOST}|NOTFOUND}    ^(.+)$
RewriteCond %1  !^NOTFOUND$
RewriteRule ^.*$ ${domainmappings:%1} [L,R=301]

如果主機不在列表中,則第二個條件將不匹配。 您仍然必須處理www前綴和大小寫匹配,但是您知道了。

當我發現大小寫匹配時,我很接近,但是無法弄清楚www前綴。 如果我使用下面的第一個,則不需要www。 如果我使用第二個,則可與www一起使用。 如果我都使用-兩者都不行。

RewriteCond %{HTTP_HOST} (.*)$ [NC] # works for without www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] # works with www
RewriteCond ${domainmappings:%1|NOTFOUND} ^(.+)$ [NC]
RewriteCond %1 !^NOTFOUND$
RewriteRule ^.*$ ${domainmappings:%1} [L,R=301]

有任何想法嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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