重定向 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 地址。
我尝试将除我自己的 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 地址。