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),由于其他原因,该服务器不允许
这样可以成功捕获
我假设我需要在
哦,也不确定这是否相关,但是
(* 1但是,请注意,此处使用的mod_rewrite伪指令是针对目录上下文量身定制的。)
捕获查询字符串的正则表达式不正确,因为您在最后一个捕获子模式上缺少
CondPattern上的引号不是必需的。
注意:使用302(临时)重定向的首次测试是为了避免潜在的缓存问题,在测试之前,您需要清除浏览器缓存。
例如,在相关的
更新:或者,不使用
想改善这个问题吗?更新问题,以便将其作为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.conf
和sites-available
中有一个sites-enabled
配置文件,它在VirtualHost中指定了一些琐碎的内容,例如ServerName
和ServerAlias
都指向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路径。