重定向 Apache 2.4 中除我的 IP 之外的路由路径

Redirect a route path in Apache 2.4 except my IP

我尝试将除我自己的 IP 地址以外的所有访问重定向到特定的 path/url(不是文件或目录,只是路由路径),例如“example.com/my-path”到主页。我在 .htaccess 文件中尝试了几个代码,但没有任何效果。

我使用了这个代码:

RewriteCond %{REMOTE_ADDR} != 1.2.3.4 (MY IP) 
RewriteRule /my-path https://example.com

我哪里错了?

RewriteCond %{REMOTE_ADDR} != 1.2.3.4 (MY IP) 
RewriteRule /my-path https://example.com

这里有一些错误:

  • != 之后和您正在测试的字符串之前不应有 space。 !=CondPattern(第二个参数)的一部分。 = 是一个 prefix-operator (这使它成为一个字符串匹配,而不是一个正则表达式)并且 ! 是一个额外的运算符,它否定表达式。所以 != 不是一个运算符,而是两个粘在一起。

  • RewriteRule模式(即/my-path)是匹配请求URL-path的正则表达式。但是请注意,在 目录 上下文中(例如 .htaccess),匹配的 URL-path 不以斜杠开头。

  • 这将隐式触发 302(临时)重定向。但是,您应该始终明确并包含 R 标志。

  • 对于外部重定向,您几乎应该总是包含 L (last) 标志以防止进一步处理。

上面应该这样写:

RewriteEngine on

RewriteCond %{REMOTE_ADDR} !=1.2.3.4
RewriteRule ^my-path$ https://example.com/ [R=302,L]

这将匹配请求的 URL /my-path 并发出临时重定向到 https://example.com/ 如果请求来自不是 1.2.3.4 的 IP 地址。