使用 .htaccess 重定向和?
Posted
技术标签:
【中文标题】使用 .htaccess 重定向和?【英文标题】:Redirect with .htaccess and? 【发布时间】:2018-03-12 03:02:00 【问题描述】:我需要将所有请求重定向到此链接
https://www.example.com/firstAccess?utm_source=Newsletter&utm_medium=email&utm_content=Benvenuto+su+Magazzino+Perfetto&utm_campaign=Benvenuto+Analytics
在这个链接:
https://www.example.com/firstAccess
所以,我需要删除 firstAccess
之后的所有内容。
完整的.htaccess是:
RewriteEngine On
RewriteCond %QUERY_STRING ^utm_source=Newsletter&utm_medium=email&utm_content=Benvenuto+su+Magazzino+Perfetto&utm_campaign=Benvenuto+Analytics$ 重写规则 ^(firstAccess)$ /$1? [右,左]
选项 - 多视图
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %HTTP:Authorization .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]
始终设置这些标题。
标头始终设置 Access-Control-Allow-Origin "*" 标头始终设置 Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT" 标头始终设置 Access-Control-Max-Age "1000" Header 总是设置 Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
重写引擎开启 RewriteCond %REQUEST_METHOD 选项 重写规则 ^(.*)$ $1 [R=200,L]
【问题讨论】:
【参考方案1】:您希望删除的 URL 的附加部分是查询字符串。您需要使用 mod_rewrite 来检查查询字符串(并在不留下尾随 ?
的情况下将其删除)。
在您的 .htaccess
文件顶部附近尝试类似以下内容:
RewriteEngine On
RewriteCond %QUERY_STRING ^utm_source=Newsletter&utm_medium=email&utm_content=Benvenuto+su+Magazzino+Perfetto&utm_campaign=Benvenuto+Analytics$
RewriteRule ^(firstAccess)$ /$1? [R,L]
这与您问题中所述的确切网址匹配。
$1
反向引用只是为了避免重复。
替换 上的尾随?
确保从重定向的 URL 中删除查询字符串。如果使用 Apache 2.4+,那么您可以改用 QSD
(查询字符串丢弃)标志。
【讨论】:
您好,感谢您的支持,但此规则不会改变任何内容。请查看链接magazzinoperfetto.cloud/… 您的.htaccess
文件中还有其他指令吗?如果是这样,请将这些添加到您的问题中。
.htaccess 仅包含您的指令。现在我收到 404 not found 错误... :(
但是您在上面发布的“完整 .htaccess 文件”不仅仅包含这些指令吗?并且在您的“完整 .htaccess 文件”中,您将这些指令放置在错误的位置 - 因此它们可能无法得到处理。正如我上面提到的,这些需要“靠近顶部”——至关重要的是,它们必须高于你的“前端控制器”。
谢谢,我已经更新了.htaccess(见我的第一篇文章)但问题是一样的:(【参考方案2】:
完整的.htaccess是:
选项 - 多视图
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %HTTP:Authorization .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]
RewriteCond %QUERY_STRING ^utm_source=Newsletter&utm_medium=email&utm_content=Benvenuto+su+Magazzino+Perfetto&utm_campaign=Benvenuto+Analytics$
RewriteRule ^(firstAccess)$ /$1? [R,L]
始终设置这些标题。
标头始终设置 Access-Control-Allow-Origin "*" 标头始终设置 Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT" 标头始终设置 Access-Control-Max-Age "1000" Header 总是设置 Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
重写引擎开启 RewriteCond %REQUEST_METHOD 选项 重写规则 ^(.*)$ $1 [R=200,L]
【讨论】:
您应该使用此附加信息(我刚刚为您完成)编辑您的问题 - 这不是“答案”。 虽然这段代码 sn-p 可以解决问题,但它没有解释为什么或如何回答这个问题。请包括对您的代码的解释,因为这确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因以上是关于使用 .htaccess 重定向和?的主要内容,如果未能解决你的问题,请参考以下文章