1

我想在 htaccess 中使用条件,如果是真的使用一些重写规则。例如我的想法是:

if(subdomain='en' OR query string have '[lan=en]'){
    RewriteRule ^home.html$ index.php [QSA,L]
    RewriteRule ^user/1.html$ user.php?id=1 [QSA,L]
    .....
}elseif(subdomain='fa' OR query string have '[lan=fa]'){
    RewriteRule ^home.html$ index_fa.php [QSA,L]
    RewriteRule ^karbar/1.html$ user.php?id=1 [QSA,L]
    .....
}

我该怎么做?有什么方法可以为每个条件使用不同的 .htaccess 文件吗?

注意:我的域地址和查询字符串是动态的

4

2 回答 2

3

通过启用 mod_rewrite 和 .htaccess httpd.conf,然后在您.htaccessDOCUMENT_ROOT目录中使用如下规则:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^en\. [OR]
RewriteCond %{QUERY_STRING} (^|&)lan=en(&|$)
RewriteRule ^home\.html$ index.php [L]

RewriteCond %{HTTP_HOST} ^en\. [OR]
RewriteCond %{QUERY_STRING} (^|&)lan=en(&|$)
RewriteRule ^user/1\.html$ user.php?id=1 [QSA,L]

RewriteCond %{HTTP_HOST} ^fa\. [OR]
RewriteCond %{QUERY_STRING} (^|&)lan=fa(&|$)
RewriteRule ^home\.html$ index_fa.php [L]

RewriteCond %{HTTP_HOST} ^fa\. [OR]
RewriteCond %{QUERY_STRING} (^|&)lan=fa(&|$)
RewriteRule ^karbar/1\.html$ user.php?id=1 [QSA,L]
于 2012-06-06T12:07:22.353 回答
1

您可以将一组RewriteCond指令与多个RewriteRule指令组合在一起,但要以一种迂回的方式:

RewriteCond %{HTTP_HOST} !^en\. [AND]
RewriteCond %{QUERY_STRING} !(^|&)lan=en(&|$)
RewriteRule .* - [S=2]
RewriteRule ^home\.html$ index.php [L]
RewriteRule ^user/1\.html$ user.php?id=1 [QSA,L]

RewriteCond %{HTTP_HOST} !^fa\. [AND]
RewriteCond %{QUERY_STRING} !(^|&)lan=fa(&|$)
RewriteRule .* - [S=2]
RewriteRule ^home\.html$ index_fa.php [L]
RewriteRule ^karbar/1\.html$ user.php?id=1 [QSA,L]

指令中的[S=2]标志RewriteRule表示“跳过接下来的 2 条规则”;因此规则如下所示:“如果HTTP_HOST不以 开头en. 且不 QUERY_STRING包含lan=en,则跳过接下来的两条规则”;因此,仅当上述条件匹配时才考虑接下来的两个规则。

于 2012-06-06T12:14:26.527 回答