我正在寻找If, else
类型的代码,它可以根据主机/域名组合我的重写规则。因此,如果域名是“domainA”,则将a重定向到b,c重定向到d,如果域名是“domainB”,则将x重定向到y,将z重定向到p。基本上我不想一次又一次地写条件,如下所示:
我为htaccess编写了以下代码
RewriteCond %{HTTP_HOST} ^domain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com$
RewriteRule ^home /? [L,R=301]
RewriteCond %{HTTP_HOST} ^domain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com$
RewriteRule ^home-old /? [L,R=301]
在上面我使用主机,因为我有多个域指向相同的主机空间,所以htaccess在所有之间是通用的。
我可以将域的上述多个条件合并为一个,而不是一次又一次地为特定域的某些重定向编写domai名称吗?
请指教,谢谢!
答案 0 :(得分:1)
在mod_rewrite中确实没有这样的if-then-else结构。你必须要聪明地遵守你的规则(这有时会使它们变得不可读或无法修改)或只是明确一切。
对于您的具体示例,您可以使用正则表达式来组合它们:
^domain\.com$
和^www\.domain\.com$
变为^(www\.)?domain\.com$
和
^home
和^home-old
仅为^home
,因为第一个仅匹配URI 以 home
开头,home-old
确实以home
开头(没有$
符号表示字符串的结尾)。所以你在看:
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC]
RewriteRule ^home /? [L,R=301]
如果您需要使用$
进行具体说明,则只需将正则表达式更改为:
RewriteRule ^home(-old)?$ /? [L,R=301]
编辑:
如果我有其他网址而不是家庭网站,那么我需要每次都写RewriteCond吗?我想每次只是确认一下我必须写下来
是的,你必须每次重复这个条件,或者,你可以在规则的最开始做一个直通:
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC]
RewriteRule ^ - [L]
这意味着:任何不是主机请求的内容: www.domain.com 或 domain.com ,然后在不重写的情况下通过。然后,您可以在此之后制定规则,因为只有具有上述以外主机的请求才能达到这些规则。
这是我之前提到的“聪明”一点。这可能会使您更改规则或稍后修改它们变得棘手,因为您在顶部设置了严格的条件。