0

希望我能很好地解释这一点!

我有一些用于 Apache 下的站点的 RewriteRules,用于将用户重定向到不同服务器上的相同页面。有两个例外 - 我需要通过 2 个 IP 地址来访问原始服务器,并且我不希望规则适用于特定路径。这是我目前的规则集:

RewriteCond %{REMOTE_HOST} !^10\.10\.10\.1(0|1)$
RewriteRule ^page/old/url/1$ http://www.site.com/new/url/1 [R=301,L]

# If the user is trying to get to /admin, let it past by skipping the next rewriterule
RewriteCond %{REQUEST_URI} ^/admin(|.*)$
RewriteRule ^.*$ - [S=1]

# Catch-all to send any "un-mapped" pages to the homepage
RewriteCond %{REMOTE_HOST} !^10\.10\.10\.1(0|1)$
RewriteRule ^ http://www.site.com/homepage [R=301,L]

# Other rules follow, but no redirections

因此,我希望 htaccess 将除 2 个 IP 地址之外的所有用户重定向到新站点位置。不过,我想确保任何人都可以访问/admin。然后有一个包罗万象的规则来挑选任何没有被特别重定向的页面。

似乎 REQUEST_URI 行不匹配,或者跳过规则不起作用。我有什么明显的遗漏吗?

4

1 回答 1

2

首先捕获您不想重写的条件似乎更简单,这样您就不必在其他规则中担心它们。

像这样的东西:

#Don't rewrite known IPs or path /admin
RewriteCond %{REMOTE_HOST} ^10\.10\.10\.1(0|1)$ [OR]
RewriteCond %{REQUEST_URI} ^/admin($|\/|\/.*)
RewriteRule ^.*$ - [NC,L]

# Redirection rules
RewriteRule ^page/old/url/1/?$ http://www.site.com/new/url/1 [R=301,NC,L]
RewriteRule ^page/old/url/2/?$ http://www.site.com/new/url/2 [R=301,NC,L]
# Catch all
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]
于 2012-12-21T18:34:07.747 回答