Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

1年前关闭。



Improve this question




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

What is fbclid? the new facebook parameter

我有一个服务器(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>

这样可以成功捕获?fbclid=垃圾,但是问题在于它需要链接http://example.com/~userdir/stuff/?fbclid=...并转发到http://example.com/userdir/public_html/stuff

我假设我需要在RewriteRule行中提供某种变量以使其正常工作,但是我不知道它应该是什么。

哦,也不确定这是否相关,但是example.confsites-available中有一个sites-enabled配置文件,它在VirtualHost中指定了一些琐碎的内容,例如ServerNameServerAlias都指向servername.com。如果这很关键,我可以提供更多详细信息。

最佳答案


您肯定会将指令放在错误的位置。您应该编辑与此域相关的.conf文件,并将指令放入与您的站点相关的VirtualHost容器中(假设您正在使用vHosts并可能托管多个站点?)。
您不应将自定义指令放在主服务器配置的<Directory />部分中。本节与根文件系统目录中的整个服务器有关。本部分仅应拒绝访问(使用Require all denied进行此操作)-您必须在配置中的其他位置(可能在适当的<Directory>文件的vHost容器中)具有更特定的.conf容器,以允许访问,否则您的网站将不会易于访问。
在将这些指令放置在“根”目录容器中(在目录上下文中)时,您看到的问题是捕获的URL路径是绝对文件系统路径-这不是您所需要的。
您需要将此<Directory />容器恢复为原来的状态。大概是这样的:

<Directory />
    AllowOverride None
    Require all denied
</Directory>
然后,您需要找到合适的vHost容器-可能在您提到的<servername>.conf文件中。实际上,您不需要使用<Directory>容器* 1,但是如果这样做,则需要将其定位到文档的根目录(即HTML文件所在的根目录)。
(* 1但是,请注意,此处使用的mod_rewrite伪指令是针对目录上下文量身定制的。)
捕获查询字符串的正则表达式不正确,因为您在最后一个捕获子模式上缺少*量词(看起来像复制/粘贴错误?)。如果要删除空的* URL参数,也应该使用fbclid=量词。
CondPattern上的引号不是必需的。
注意:使用302(临时)重定向的首次测试是为了避免潜在的缓存问题,在测试之前,您需要清除浏览器缓存。
例如,在相关的<Directory>中使用适当的<VirtualHost>容器:
<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>

更新:或者,不使用<Directory>容器,直接在<VirtualHost>或主服务器配置中尝试以下操作:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)&?fbclid=[^&]*&?(.*)$ [NC]
RewriteRule ^ %{REQUEST_URI}?%1%2 [R=301,L]
REQUEST_URI服务器变量包含相对于根的URL路径。

08-05 06:46
查看更多