我想做的是删除utm_source
参数,然后用我的index2.html
文件替换任何请求。
这是我尝试的:
# BEGIN
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} "utm" [NC]
RewriteRule ^(.*)?$ "index2.html$1" [QSA,L]
RewriteRule (.*) /$1? [R=301,L,QSD]
<IfModule mod_rewrite.c>
# END
使用以下代码行,我删除了utm_source
参数:
RewriteRule (.*) /$1? [R=301,L,QSD]
我想要的是使用这一行代码RewriteRule ^(.*)?$ "index2.html$1" [QSA,L]
,然后删除utm_source
参数,但我无法做到这一点。
到目前为止,更糟糕的是我一次只能做一件事。如果删除该参数,请不要执行其他操作。
假设您的.htaccess
文件位于文档根目录中...
要仅删除utm_source
URL参数(而不是所有参数),您可以先执行以下操作:
RewriteCond %{QUERY_STRING} ^(.*)&?utm_source=[^&]*&?(.*)$
RewriteRule (.*) /$1?%1%2 [R=302,L]
然后,要重写对index2.html
您的所有请求,将执行以下操作(假设您也不想重写对现有文件的请求):
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index2.html [L]
但是,在您的指令中,您不仅可以重写为index2.html
,而且还试图附加其他路径名信息(path-info)-这是必需的吗?尽管您的代码中缺少斜线(在中使用.htaccess
),所以重写将格式错误,并导致404。如果需要path-info,则将最后一个更改RewriteRule
为:
RewriteRule (.*) index2.html/$1 [L]
RewriteEngine On
# Remove the "utm_source" URL parameter
RewriteCond %{QUERY_STRING} ^(.*)&?utm_source=[^&]*&?(.*)$
RewriteRule (.*) /$1?%1%2 [R=302,L]
# Rewrite all requests to "index2.html"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index2.html [L]
不需要<IfModule>
包装器,因为如果没有mod_rewrite,您的代码可能无法工作?RewriteBase
如果您的.htaccess
文件位于文档根目录中,则也不需要此指令。
RewriteCond %{QUERY_STRING} "utm" [NC] RewriteRule ^(.*)?$ "index2.html$1" [QSA,L] RewriteRule (.*) /$1? [R=301,L,QSD]
当前指令存在许多问题。一对出色的情侣...
规则顺序错误,因为检查查询字符串的条件仅适用于RewriteRule
随后的条件。因此,最后一个RewriteRule
(您说的是“删除utm_source参数”)无条件执行,并且将导致重定向循环。
第一条规则(重写为index2.html$1
)仅在查询字符串中(任何位置)存在“ utm”(未删除)时才执行。但这index2.html$1
将导致无效的重写.htaccess
(如上所述)-您缺少斜杠)。
您的最后一条规则将删除整个查询字符串,而不仅仅是utm_source
参数。但是您的第一个规则尝试将查询字符串追加到重写的请求中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句