Linux 用于删除fbclid的Apache2 mod_重写规则公开公共html

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

我正在尝试从URL中删除Facebook跟踪查询字符串——类似于这个问题:

我有一个自己的服务器(Apache 2.4),由于其他原因不允许
.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]