Linux 用于删除fbclid的Apache2 mod_重写规则公开公共html
我正在尝试从URL中删除Facebook跟踪查询字符串——类似于这个问题: 我有一个自己的服务器(Apache 2.4),由于其他原因不允许Linux 用于删除fbclid的Apache2 mod_重写规则公开公共html,linux,apache,mod-rewrite,Linux,Apache,Mod Rewrite,我正在尝试从URL中删除Facebook跟踪查询字符串——类似于这个问题: 我有一个自己的服务器(Apache 2.4),由于其他原因不允许.htaccess文件,因此需要在apache2.conf中设置重写URL的指令(我假设)。以下是我所拥有的: <Directory /> Options FollowSymLinks AllowOverride None Require all denied RewriteEngine On Rewri
.htaccess
文件,因此需要在apache2.conf
中设置重写URL的指令(我假设)。以下是我所拥有的:
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
RewriteEngine On
RewriteCond %{QUERY_STRING} "^(.*)&?fbclid=[^&]+&?(.)$" [NC]
RewriteRule ^(.*)$ /$1?%1%2 [R=301,L]
</Directory>
选项如下符号链接
不允许超限
要求全部拒绝
重新启动发动机
RewriteCond%{QUERY_STRING}“^(.*)和?fbclid=[^&]+&(.$”[NC]
重写规则^(.*)$/$1?%1%2[R=301,L]
这将成功捕获?fbclid=
垃圾,但问题是它获取链接http://example.com/~userdir/stuff/?fbclid=…
并转发到http://example.com/userdir/public_html/stuff
我假设我需要在RewriteRule
行中提供某种变量,以使其正确工作,但我不知道它应该是什么
哦,另外,也不确定这是否相关,但是在站点中有一个example.conf
配置文件可用和站点启用,它在VirtualHost中指定了一些琐碎的东西,比如服务器名和服务器别名
都指向服务器名.com
。如果这是至关重要的,我可以提供进一步的细节
然后您需要找到合适的vHost容器-可能在您提到的.conf
文件中。实际上,您不需要使用
容器*1,但如果您这样做,它需要以文档根目录(即HTML文件所在的根目录)为目标
(*1但是,请注意,此处使用的mod_rewrite指令是针对目录上下文定制的。)
捕获查询字符串的正则表达式不正确,因为在最后一个捕获子模式中缺少一个*
量词(看起来像是复制/粘贴错误?)。如果要删除空的fbclid=
URL参数,还应该使用*
量词
CondPattern上的周围引号不是必需的
注意:首先使用302(临时)重定向进行测试,以避免潜在的缓存问题,您需要在测试之前清除浏览器缓存
例如,在相关的
中使用适当的
容器:
REQUEST\u URI
服务器变量包含根相对URL路径。哦,我应该提到,在发布此文件之前,我曾尝试修改域conf
文件,但是,当我将重写指令放入.conf
VirtualHost容器中时,它似乎没有任何效果——不管我是否将它们包装在
中。当我修改apache2.conf
时,我才得到重写规则来做一些事情。当我说重写规则无效时,我的意思是我转到fbclid URL,它没有被重写。这不是缓存问题,我尝试了一个新的浏览器,我还可以从apache日志中看出URL正在被访问。(重新启动apache等)p.s.。regex在.conf文件中实际上很好,但我在发布问题时输入的是错误的!不过,感谢您关于捕获空的fbclid=
参数的观点。单个.conf
文件将需要(通过Include
指令)包含在主apache2.conf
文件中(如果尚未包含)。请注意,编写的指令旨在用于
容器(即目录上下文)。如果要将指令直接放入vHost容器(virtualhost上下文),则需要更改这些指令。mod_rewrite在不同的上下文中工作方式不同。从您的初始URL来看,您似乎正在使用Apache的每用户web目录?如果是这样,那么您可能根本就没有使用vhost?无论您是或不是
容器,都需要以被请求的文件系统文档根为目标。如果您仍然在生成的URL中看到public\u html
,则表明情况并非如此。啊哈——将%{REQUEST\u URI}
添加到apache2.conf
中——我想这就是我最初制定问题时搜索的“变量”。(稍后我将尝试使用单个.conf
文件;这似乎是Apache2.4想要的方式)。从Apache2.4文档中,我并不十分清楚mod_rewrite是如何与上下文交互的;我认为部分文件要么确实不清楚,要么信息组织得不好。昨天我花了一整天的时间阅读,终于鼓起勇气把我的第一个问题发到这里。谢谢你的帮助!
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
RewriteEngine On
RewriteCond %{QUERY_STRING} "^(.*)&?fbclid=[^&]+&?(.)$" [NC]
RewriteRule ^(.*)$ /$1?%1%2 [R=301,L]
</Directory>
<Directory />
AllowOverride None
Require all denied
</Directory>
<Directory /absolute/file/system/path/to/document-root>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)&?fbclid=[^&]*&?(.*)$ [NC]
RewriteRule (.*) /$1?%1%2 [R=301,L]
</Directory>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)&?fbclid=[^&]*&?(.*)$ [NC]
RewriteRule ^ %{REQUEST_URI}?%1%2 [R=301,L]