【问题标题】:URL rewriting with dynamic parameters使用动态参数重写 URL
【发布时间】:2016-01-07 08:39:39
【问题描述】:

如果一开始没有设置参数的数量和名称,是否可以将URL重写为带有GET参数的形式?

假设我有这个

/categories/key_1/111/    
/categories/key_1/111/key_2/222/
/categories/key_1/333/key_2/444/key_3/555/
/categories/key_5/333/key_6/444/key_7/555/

我可以把它改写成表格吗?

/categories/?key_1=111&key_2=222....&key_x=xxx

如果参数的顺序、数量和名称​​不是静态的

唯一的条件是 KEY-VALUE 对是这样设置的

/root_folder/key_x/value_x/

【问题讨论】:

    标签: regex .htaccess url parameters rewrite


    【解决方案1】:

    这个单一的递归应该能够做到这一点:

    RewriteEngine On
    
    # to convert /categories/n1/v1/n2/v2 to /categories/?n2=v2&n1=v1
    RewriteRule ^(categories)/([^/]*)/([^/]*)(/.*)?$ /$1/$4?$2=$3 [L,QSA,NC]
    

    【讨论】:

    • 其实没有。不知道有没有你测试过,但是我在真实服务器上测试过,正则表达式测试器和htaccess在线测试器重写的url是/categories//n2/v2?n1=v1
    • 此规则中没有重定向,因此 URL 不会随此规则更改。它在我的 Apache 上运行良好。您应该提供有问题的完整 htaccess,可能存在冲突的规则。
    • 重写 URL 意味着 url 会改变。它不会在浏览器中更改,因为没有重定向,但 Apache 将处理重写的 URL,而不是您在浏览器中请求的 URL。不,这行不通。我使用了空白 htaccess。你在正则表达式编辑器中测试过吗?它重写了我在上面发布的字符串中的 URL。
    • RegExp 编辑器不是测试 mod_rewrite 规则的正确方法,因为mod_rewrite 在循环中运行。是的,在我的 Apache 上使用 http://localhost/categories/key_5/333/key_6/444/key_7/555/ URL 运行良好。所以显然你的设置是一个问题,而不是规则。您的categories 目录是否有index.php
    猜你喜欢
    • 2021-09-23
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多