使用 .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 重定向和?的主要内容,如果未能解决你的问题,请参考以下文章

301 使用 .htaccess 重定向 URL 模式

使用GeoIP和.htaccess重定向流量

.htaccess 结合 301 重定向和 URI 重写

使用 htaccess 重定向整个站点

PHP 和 .htaccess 重定向之间的区别

htaccess 使用 OR 和 NC 重定向