我正在寻找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在所有域之间是常见的。
我可以将一个域的以上多个条件组合成一个,而不是为特定域的一些重定向一遍又一遍地写域名吗?
敬请指教,谢谢!
发布于 2012-10-27 03:18:46
在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,而不是home,botique,和头发尖,那么我每次都需要写urls吗?我想我每次都要写这个,只是为了确认一下你
是的,您每次都必须重复该条件,或者,您可以在规则的最开始部分创建一个直通:
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC]
RewriteRule ^ - [L]这意味着:任何不是对主机的请求:www.domain.com或domain.com,都可以通过,而不需要重写。然后,您可以在此之后使用规则,因为只有具有上述主机以外的主机的请求才会达到这些规则。
这就是我之前提到的“聪明”的部分。这可能会使更改规则或稍后修改规则变得棘手,因为您在顶部设置了一个严格的条件。
https://stackoverflow.com/questions/13087146
复制相似问题