htaccess Rewriterule如果url包含特定单词,请保留其余URL

时间:2018-10-25 07:58:12

标签: url-rewriting

Facebook最近添加了一个跟踪脚本/参数:&fbclid = .... 因此,当人们单击指向我的网站(作品集)的Facebook页面上的链接时,我的网站找不到正确的页面。

一个例子:
这是facebook创建的URL:http://stanbroeksteeg.nl/portfolio?video=296818340&fbclid=IwAR1OuXwzLVBQDFSgeNzCVgJ7lkCNhWeHZwhOe2vs9SmZzCYFMcBDJ6N-lX8

我的网站很快将其更改为:
http://stanbroeksteeg.nl/portfolio?video=296818340&fbclid

这导致找不到页面。所以我要做的是以下内容:
如果网址包含&fbclid,请删除此部分,并保留网址的其余部分。因此,如果我以示例网址为例,则需要这样:
http://stanbroeksteeg.nl/portfolio?video=296818340

我想出了这些重写规则:

RewriteCond %{QUERY_STRING} “fbclid=” [NC]
RewriteRule (.*) /$1? [R=301,L]

RewriteCond %{QUERY_STRING} ^(.*)&?fbclid=(.*)$ [NC]
RewriteRule ^/?(.*)$ /$1?%1 [R=301,L]

但是两个规则都不能解决问题。 有人可以帮我吗?

这是我当前的.htaccess

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [QSA]
SetOutputFilter DEFLATE

<FilesMatch ".(eot|ttf|otf|woff|woff2)">
 Header set Access-Control-Allow-Origin "*"
</FilesMatch>

<IfModule mod_expires.c>
   ExpiresActive on

   ExpiresByType image/jpg "access plus 1 month"
   ExpiresByType image/jpeg "access plus 1 month"
   ExpiresByType image/gif "access plus 1 month"
   ExpiresByType image/png "access plus 1 month"
</IfModule>

2 个答案:

答案 0 :(得分:2)

我找到了解决问题的方法

RewriteCond %{QUERY_STRING} ^(.*)&?fbclid=[^&]+&?(.*)$ [NC]
RewriteRule ^(.*)$ /$1?%1%2 [R=301,L]

希望它将来可以帮助其他人

答案 1 :(得分:0)

@Bram的解决方案在我的Wordpress中起作用。这是.htaccess之前和之后的代码。

之前:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On    
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

之后:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{QUERY_STRING} ^(.*)&?fbclid=[^&]+&?(.*)$ [NC]
RewriteRule ^(.*)$ /$1?%1%2 [R=301,L]

RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress