【问题标题】:.htaccess Wildcard Redirect With GET Variables.htaccess 带有 GET 变量的通配符重定向
【发布时间】:2015-07-19 03:32:58
【问题描述】:

我正在尝试将我网站上的以下所有 URL 重定向到新版本。这是目标:

之前(注意没有'.php')

https://example.com/view?username=asdf1234

重定向到(使用“.php”并在“工具”文件夹内)

https://example.com/tool/view.php?username=asdf1234

我尝试了几个示例,但无法弄清楚。这是我最好的猜测

RewriteEngine On
RewriteRule ^/view\?username=(.+) /tool/view.php?%1 [L,R=301]

添加

RewriteEngine On
RedirectMatch ^/view(.*)$ https://example.com/tool/view.php$1

已成功重定向,但它是 302 重定向。当我添加 [L,R=301] 时,它给出了 500 错误。

【问题讨论】:

    标签: .htaccess redirect get wildcard http-status-code-301


    【解决方案1】:

    您可以尝试否定断言:

    RewriteEngine On
    RewriteCond "%{REQUEST_URI}" ^/tool/?.*$
    RewriteRule ".?" "-" [S=1]
    RewriteRule "^/(.*)$" "/tool/$1?%{QUERY_STRING}" [L,R=301]
    
    • 第一条规则规定了 URL 以 /tool 开头的条件。
    • 第二条规则规定,如果第一条规则通过,则SKIP下一个 规则。
    • 第三条规则说实现重定向到/tool/(TheUrlYouVisited.whatever)

    因此,如果 URL 不以 /tool 开头,则不会跳过第三条规则,因此您可以进行全部重定向。


    作为测试,您也可以添加一个简单的:

    RedirectMatch ^/view(.*)$ http://www.example.com/tool/view$1
    

    如果这不起作用,你就知道发生了其他事情。

    【讨论】:

    • 我刚试了一下,当我访问example.com/view?username=test时没有任何重定向
    • 你有其他优先的重写规则吗?也许更高的地方
    • 我将它移到了我的 .htaccess 文件的顶部,但没有任何重定向。
    • 将语法错误添加到 .htaccess 并查看站点是否加载。如果它加载,你知道 .htaccess 文件甚至没有被查看。
    • 我添加了您的第二个代码,页面成功重定向。我如何使它成为 301 重定向而不是 302 重定向
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多