regex - .htaccess 确定引荐来源网址是否不是当前域

标签 regex apache .htaccess mod-rewrite http-referer

我正在尝试创建一个 .htaccess mod_rewrite,如果当前引用者不是我自己的域,它的行为会有所不同。例如,假设我拥有 example.com(即 www.example.com、 http://example.com 等)。当有人访问 example.com(或 beta.example.com 等子域)时,我想忽略此 .htaccess 规则。所以我猜正则表达式基本上只会在其中查找 example.com 并忽略它们。

但是,如果像 otherdomain.com 这样的域(假设通过 cname 或 A 记录指向 example.com)访问我的网站,我想将它们重定向到某个地方。到目前为止,我认为已经接近但不起作用。

我对这些规则的主要困惑是 RewriteRule 之后的部分(在本例中为 ^$)。我在谷歌搜索中看到了一些不同的东西,但我不确定其中的差异。例如,我也只看到过 ^、(.*)$ 等。

RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*(example)\.com
RewriteRule ^$ redirectfile.php [L]

我也一直在搞乱

RewriteCond %{HTTP_REFERER} ^http://(.+\.)*\.com
RewriteCond %1 !^(example)\.$
RewriteRule ^$ redirectfile.php [R=302,L]

最佳答案

尝试

RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*example\.com 
RewriteRule ^ redirectfile.php [L]

您有 ^$,它仅与主页匹配。

我将其更改为 ^ ,它将匹配每个请求,假设您想要匹配每个请求。

(.*)$ 也会匹配每个请求,但也会捕获匹配,以便您在目标中将其重用为 $1

关于regex - .htaccess 确定引荐来源网址是否不是当前域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9278410/

相关文章:

jquery简单正则表达式搜索包含的子字符串

正则表达式查找最后一个下划线和它后面的所有文本

java - 使用 Java 的 HttpUrlConnection PATCH 请求

linux - 使用每个虚拟主机一个文件的 vhost.d 目录时,在 Apache 2.4 中指定默认虚拟主机?

php - htaccess - 重写具有相同名称目录的文件

python - 用于额外字段的正则表达式

ruby-on-rails - 从标题案例到句子案例

php - HTTP_HOST 有多可靠?

apache - htaccess 强制执行 "www"但允许子域访问

php - 在 ubuntu 中安装 Yii2 高级模板