希望我能够解释得这么好!
我在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行不匹配,或者跳过规则不起作用。有什么明显的东西我不见了吗?
答案 0 :(得分: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]