HTACCESS对多个重写的重新写入?

发布于 2025-01-26 12:16:57 字数 857 浏览 3 评论 0原文

我在.htaccess中的重定向方面有麻烦。 我有几个域(example.com,example.net,example.uk)。我为每个域都有一套重写。但是由于某种原因,重定向适用于所有域。以下是我尝试过的HTACCESS规则文件。

RewriteCond %{HTTP_HOST} ^(www\.example\.com|example\.com) [NC]
RewriteRule ^1example$ /  [R=302,L]
RewriteRule ^2example$ /example2  [R=302,L]
RewriteRule ^3example$ /  [R=302,L]
RewriteRule ^4example$ /example4  [R=302,L]

RewriteCond %{HTTP_HOST} ^(www\.example\.net|example\.net) [NC]
RewriteRule ^5example$ /sgsg  [R=302,L]
RewriteRule ^6example$ /example2  [R=302,L]
RewriteRule ^7example$ /  [R=302,L]
RewriteRule ^8example$ /example44  [R=302,L]

RewriteCond %{HTTP_HOST} ^(www\.example\.uk|example\.uk) [NC]
RewriteRule ^9example$ /  [R=302,L]
RewriteRule ^10example$ /example12  [R=302,L]
RewriteRule ^11example$ /  [R=302,L]
RewriteRule ^12example$ /example41  [R=302,L]

您是否知道如何仅针对特定域分开重写?

I have trouble with redirects in .htaccess.
I have several domains (example.com, example.net, example.uk). I have set of RewriteRules for each domain. But for some reason, the redirects works for all domains. Following is my tried htaccess rules file.

RewriteCond %{HTTP_HOST} ^(www\.example\.com|example\.com) [NC]
RewriteRule ^1example$ /  [R=302,L]
RewriteRule ^2example$ /example2  [R=302,L]
RewriteRule ^3example$ /  [R=302,L]
RewriteRule ^4example$ /example4  [R=302,L]

RewriteCond %{HTTP_HOST} ^(www\.example\.net|example\.net) [NC]
RewriteRule ^5example$ /sgsg  [R=302,L]
RewriteRule ^6example$ /example2  [R=302,L]
RewriteRule ^7example$ /  [R=302,L]
RewriteRule ^8example$ /example44  [R=302,L]

RewriteCond %{HTTP_HOST} ^(www\.example\.uk|example\.uk) [NC]
RewriteRule ^9example$ /  [R=302,L]
RewriteRule ^10example$ /example12  [R=302,L]
RewriteRule ^11example$ /  [R=302,L]
RewriteRule ^12example$ /example41  [R=302,L]

Do you have any idea how to separate RewriteRules only for specific domain?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

如梦初醒的夏天 2025-02-02 12:16:57

带有您的样品和尝试;请尝试以下内容.htaccess规则文件。根据Anubhava的评论,在每个重写之前添加了rewriteCond条件。

在测试URL之前,请确保清除浏览器缓存。

RewriteEngine ON

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.com$ [NC]
RewriteRule ^(?:1|3)example$ /  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.com$ [NC]
RewriteRule ^(2|4)example$ /example$1  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.net$ [NC]
RewriteRule ^5example$ /sgsg  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.net$ [NC]
RewriteRule ^6example$ /example2  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.net$ [NC]
RewriteRule ^7example$ /  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.net$ [NC]
RewriteRule ^8example$ /example44  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.uk$ [NC]
RewriteRule ^9example$ /  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.uk$ [NC]
RewriteRule ^10example$ /example12  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.uk$ [NC]
RewriteRule ^11example$ /  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.uk$ [NC]
RewriteRule ^12example$ /example41  [R=302,L,NC]

适用于OP的尝试的修复程序:

  • 附加了2个规则,例如:重写 ^(?:1 | 3)示例$/[r = 302,l,nc ]上面文件中的第一条规则。
  • 在所有规则中添加了ncrewriteCond重写中添加。
  • 使用rewriteCond中的非捕捉组来制作www。 /code> to ^(?:www \。)?示例\ .com $

With your shown samples and attempts; please try following .htaccess rules file. As per anubhava's comments have added RewriteCond conditions before each RewriteRule.

Please make sure to clear your browser cache before testing your URLs.

RewriteEngine ON

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.com$ [NC]
RewriteRule ^(?:1|3)example$ /  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.com$ [NC]
RewriteRule ^(2|4)example$ /example$1  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.net$ [NC]
RewriteRule ^5example$ /sgsg  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.net$ [NC]
RewriteRule ^6example$ /example2  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.net$ [NC]
RewriteRule ^7example$ /  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.net$ [NC]
RewriteRule ^8example$ /example44  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.uk$ [NC]
RewriteRule ^9example$ /  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.uk$ [NC]
RewriteRule ^10example$ /example12  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.uk$ [NC]
RewriteRule ^11example$ /  [R=302,L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.uk$ [NC]
RewriteRule ^12example$ /example41  [R=302,L,NC]

Fixes applied to OP's attempts:

  • Attached 2 rules into 1 eg: RewriteRule ^(?:1|3)example$ / [R=302,L,NC] very first rule in above file.
  • Added NC flag in both RewriteCond and RewriteRule in all of the rules.
  • Made use of non-capturing group in RewriteCond to make www. optional eg: FROM ^(www\.example\.com|example\.com) TO ^(?:www\.)?example\.com$
迷路的信 2025-02-02 12:16:57

如前所述,rewriteCond条件)指令本身仅适用于以下的第一个重写RewriteCond指令构成单个规则的一部分。

但是,您可以以各种方式“解决”此操作,而无需将相同的条件应用于多个规则。

例如:

# Skip the following 4 rules when host is NOT "example.com"
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com [NC]
RewriteRule ^ - [S=4]

# These rules only apply to "example.com"
RewriteRule ^1example$ /  [R=302,L]
RewriteRule ^2example$ /example2  [R=302,L]
RewriteRule ^3example$ /  [R=302,L]
RewriteRule ^4example$ /example4  [R=302,L]

# Skip the following 4 rules when host is NOT "example.net"
RewriteCond %{HTTP_HOST} !^(www\.)?example\.net [NC]
RewriteRule ^ - [S=4]

# These rules only apply to "example.net"
RewriteRule ^5example$ /sgsg  [R=302,L]
RewriteRule ^6example$ /example2  [R=302,L]
RewriteRule ^7example$ /  [R=302,L]
RewriteRule ^8example$ /example44  [R=302,L]

# Skip the following 4 rules when host is NOT "example.uk"
RewriteCond %{HTTP_HOST} !^(www\.)?example\.uk [NC]
RewriteRule ^ - [S=4]

# These rules only apply to "example.uk"
RewriteRule ^9example$ /  [R=302,L]
RewriteRule ^10example$ /example12  [R=302,L]
RewriteRule ^11example$ /  [R=302,L]
RewriteRule ^12example$ /example41  [R=302,L]

或者,您可以暂时将主机名前缀到URL路径,并直接在重写指令中对其进行测试。

例如:

# Prefix the hostname to the URL-path
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} ^(?:www\.)?(example\.com|example\.net|example\.uk)
RewriteRule ^ %1%{REQUEST_URI}

RewriteRule ^example\.com/1example$ /  [R=302,L]
RewriteRule ^example\.com/2example$ /example2  [R=302,L]
RewriteRule ^example\.com/3example$ /  [R=302,L]
RewriteRule ^example\.com/4example$ /example4  [R=302,L]

RewriteRule ^example\.net/5example$ /sgsg  [R=302,L]
RewriteRule ^example\.net/6example$ /example2  [R=302,L]
RewriteRule ^example\.net/7example$ /  [R=302,L]
RewriteRule ^example\.net/8example$ /example44  [R=302,L]

RewriteRule ^example\.uk/9example$ /  [R=302,L]
RewriteRule ^example\.uk/10example$ /example12  [R=302,L]
RewriteRule ^example\.uk/11example$ /  [R=302,L]
RewriteRule ^example\.uk/12example$ /example41  [R=302,L]

# (OPTIONAL) Remove hostname prefix from URL-path
RewriteRule ^[^/]+/(.*) $1

As already mentioned, the RewriteCond (condition) directive itself applies only to the first RewriteRule that follows. The RewriteCond directive forms part of a single rule.

However, you can "workaround" this in various ways, without having to apply the same condition to multiple rules.

For example:

# Skip the following 4 rules when host is NOT "example.com"
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com [NC]
RewriteRule ^ - [S=4]

# These rules only apply to "example.com"
RewriteRule ^1example$ /  [R=302,L]
RewriteRule ^2example$ /example2  [R=302,L]
RewriteRule ^3example$ /  [R=302,L]
RewriteRule ^4example$ /example4  [R=302,L]

# Skip the following 4 rules when host is NOT "example.net"
RewriteCond %{HTTP_HOST} !^(www\.)?example\.net [NC]
RewriteRule ^ - [S=4]

# These rules only apply to "example.net"
RewriteRule ^5example$ /sgsg  [R=302,L]
RewriteRule ^6example$ /example2  [R=302,L]
RewriteRule ^7example$ /  [R=302,L]
RewriteRule ^8example$ /example44  [R=302,L]

# Skip the following 4 rules when host is NOT "example.uk"
RewriteCond %{HTTP_HOST} !^(www\.)?example\.uk [NC]
RewriteRule ^ - [S=4]

# These rules only apply to "example.uk"
RewriteRule ^9example$ /  [R=302,L]
RewriteRule ^10example$ /example12  [R=302,L]
RewriteRule ^11example$ /  [R=302,L]
RewriteRule ^12example$ /example41  [R=302,L]

Alternatively, you could temporarily prefix the hostname to the URL-path and test for this directly in the RewriteRule directive.

For example:

# Prefix the hostname to the URL-path
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} ^(?:www\.)?(example\.com|example\.net|example\.uk)
RewriteRule ^ %1%{REQUEST_URI}

RewriteRule ^example\.com/1example$ /  [R=302,L]
RewriteRule ^example\.com/2example$ /example2  [R=302,L]
RewriteRule ^example\.com/3example$ /  [R=302,L]
RewriteRule ^example\.com/4example$ /example4  [R=302,L]

RewriteRule ^example\.net/5example$ /sgsg  [R=302,L]
RewriteRule ^example\.net/6example$ /example2  [R=302,L]
RewriteRule ^example\.net/7example$ /  [R=302,L]
RewriteRule ^example\.net/8example$ /example44  [R=302,L]

RewriteRule ^example\.uk/9example$ /  [R=302,L]
RewriteRule ^example\.uk/10example$ /example12  [R=302,L]
RewriteRule ^example\.uk/11example$ /  [R=302,L]
RewriteRule ^example\.uk/12example$ /example41  [R=302,L]

# (OPTIONAL) Remove hostname prefix from URL-path
RewriteRule ^[^/]+/(.*) $1
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文