【问题标题】:.htaccess URL redirect with parameters.htaccess 带参数的 URL 重定向
【发布时间】:2022-01-31 02:45:19
【问题描述】:

我有一个这样的链接:

发件人:http://www.example.com/wp/?p=231

我需要将它重定向到这个 URL:

收件人:https://www.example.com/jump/

这是怎么做到的?

这是 .htaccess 文件:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

# 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

【问题讨论】:

    标签: wordpress .htaccess mod-rewrite


    【解决方案1】:

    您需要使用 mod_rewrite 来执行此特定重定向。并且此规则应位于您的 .htaccess 文件的最顶部,在所有现有规则之前。例如:

    RewriteEngine On
    
    RewriteCond %{SERVER_PORT} =80
    RewriteCond %{HTTP_HOST} =www.example.com
    RewriteCond %{QUERY_STRING} ^p=231$
    RewriteRule ^wp/$ https://%{HTTP_HOST}/jump/ [QSD,R=302,L]
    

    更新:添加了两个额外的条件来检查SERVER_PORTHTTP_HOST,这样它就只会完全按照说明重定向http://www.example.com/wp/?p=231。然后它直接重定向到https://www.example.com/jump/

    检查QUERY_STRING 服务器变量的附加条件 是必要的,以便匹配查询字符串,因为RewriteRule 模式 匹配URL-仅路径。

    QSD 标志是从重定向响应中删除现有查询字符串所必需的,否则默认通过。

    【讨论】:

    • 嗨,谢谢你的回答,但它不适用于我下面的 .htaccess: RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ example.com/$1 [R,L] RewriteEngine在 RewriteCond %{QUERY_STRING} ^p=231$ RewriteRule ^wp/$ /jump/ [QSD,R=302,L] # BEGIN WordPress RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [ L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule 。 /index.php [L] # 结束 WordPress
    • @Mete 你到底是什么意思“没有工作”?你看到重定向了吗?重定向不正确?错误?没有什么?在所有现有规则之前,该规则需要位于 .htaccess 文件的最顶部。 HTTP vs HTTPS 的意义是什么。您是否只想重定向此 URL 的 HTTP 版本?您是否托管多个域?
    • @Mete 我已经更新了我的答案。
    • 我刚刚将您的更新应用于脚本,但由于某种原因我没有看到任何重定向。所以它返回原始的 http URL:example.com/wp/?p=231。不,我们没有托管多个域。我们希望重定向的链接已损坏,由于某种原因它是 http,我们希望像帖子中那样重定向到现有的 https 页面(/jump/)。
    • @Mete 如果您没有看到重定向,那么 1. .htaccess 文件没有被处理(考虑到随后的 WP 指令似乎不太可能 - 尽管这可能由服务器处理config 代替?)或 2. 由于某种原因,此特定请求未到达您的服务器?如果您检查 HTTP 响应标头,您是否看到任何异常? server 标头报告什么?您使用的是 CDN 还是某种前端代理?您提到(在其他 cmets 中)它返回一个“空白页”? HTTP 状态是什么?
    【解决方案2】:

    根据您发布的 .htaccess 文件,解决方案应如下所示:

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /
    
        RewriteCond %{REQUEST_URI} ^/wp/ [NC]
        RewriteCond %{QUERY_STRING} p=231
        RewriteRule (.*) /jump? [R=301]
    
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
    
        RewriteRule ^index\.php$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /index.php [L]
    </IfModule>
    

    您可以通过以下链接查看:

    https://htaccess.madewithlove.com?share=d5a7976b-47f3-4143-bb7c-103a722f0b2d

    【讨论】:

    • 查询字符串呢?
    • 最后会包含。你可以在这里查看:htaccess.madewithlove.com
    • 感谢您的回答。出于某种原因,您的答案不适用于我的 .htaccess 脚本。请查看我更新后的带有原始脚本的帖子。
    • @Mete 我更新了我的答案,并编辑了你的 .htaccess。您可以检查链接,您会在底部看到满足模式时的新 URL 为 example.com/jump。 :)
    • 再次感谢您,但它对我不起作用。我的 URL 链接实际上是:example.com/wp/?p=231 这不是 Https!如果我使用测试站点对此进行测试,它将返回为 https“example.com/wp/?p=231”。我的网站返回 http 为:“example.com/wp/?p=231” :-) 网站上的所有其他链接都是 Https 并且除了这些条件 url 链接之外正确返回。 :-(
    猜你喜欢
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    • 2022-12-29
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多