【问题标题】:Rewrite rule on multiple variables using Apache mod_rewrite使用 Apache mod_rewrite 重写多个变量的规则
【发布时间】:2011-03-12 00:44:04
【问题描述】:

我想知道如何使用 Apache mod_rewrite 选项将 www.site.com?lang=lv&type=1&mode=2 重写为 www.site.com/lv/1/2

【问题讨论】:

    标签: apache url mod-rewrite


    【解决方案1】:

    假设您确实想将/lv/1/2 重写为?lang=lv&type=1&mode=2(我认为没有理由这样做)并且没有其他重写处于活动状态,这应该可以解决问题:

    RewriteRule ^/([^/]*)/([^/]*)/([^/]*)$ ?lang=$1&type=$2&mode=$3 [L]
    

    还有;如果您想将这些幻数包含在您的 URI 中,最好将它们替换为更有用的信息。

    编辑:如果您确实想要做相反的事情,请参阅 Matt S 的答案。

    【讨论】:

    • 是的,我说的是相反的:P 谢谢!
    【解决方案2】:

    基本重写:

    RewriteEngine On
    RewriteRule http://www.site.com/?lang=(.+?)&type=(\d+?)&mode=(\d+?) http://www.site.com/$1/$2/$3 [L,R=permanent]
    

    编辑:更改了重写标志以强制永久重定向

    【讨论】:

    • 这似乎有效:在此服务器上找不到请求的 URL。
    • 你有回复site.com/lv/1/2的页面吗?你在使用某种框架吗?
    【解决方案3】:

    您需要分别处理 URI 路径和查询。如果参数以相同的顺序出现,您可以这样做:

    RewriteCond %{QUERY_STRING} ^lang=([^&]+)&type=([^&]+)&mode=([^&]+)$
    RewriteRule ^$ /%1/%2/%3? [L,R=301]
    

    否则,您需要在使用此规则之前将它们按正确的顺序排列,或者一次获取每个参数。

    【讨论】:

    • 这些都不起作用,我还需要在 Apache 配置或其他方面进行更改吗?
    • @werd:您是否使用强制RewriteEngine on?您想在哪里使用该规则?
    • 是的,我正在使用它,我正在站点索引中使用它。在根目录中,我有 index.php 和 .htaccess 文件
    • @werd:您是否使用任何其他可能与此冲突的规则?
    • @werd:而且 URL 路径总是只是 / 并且总是这三个 URL 参数都有一个值?
    猜你喜欢
    • 2013-09-08
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 2010-12-25
    • 2019-03-19
    • 2013-06-13
    相关资源
    最近更新 更多