【问题标题】:How to get multiply variables with mod_rewrite如何使用 mod_rewrite 获得乘法变量
【发布时间】:2013-07-10 23:34:31
【问题描述】:

如何从http://site.com/id555/forum666/thread777 这个http://site.com/#id=555#forum=666#thread=777 制作? 我已经尝试过这种方式:

RewriteEngine on
RewriteRule ^/id([0-9]+)/?$ /#id=$1 [NC,NE,R=303]
RewriteRule ^/forum([0-9]+)/?$ /#forum=$1 [NC,NE,R=303]
RewriteRule ^/thread([0-9]+)/?$ /#thread=$1 [NC,NE,R=303]

但我得到的只是http://site.com/#id=555,所以我试着这样写:

RewriteEngine on
RewriteRule ^(/(id|forum|thread)([0-9]+))+ #$2=$3 [NC,NE,N,R=303]

结果是 http://site.com/#thread=777 。 A 不明白,我必须如何改变规则,才能让它走上正确的道路。我在 VirtualHost 部分的主配置中使用它,因为它很像我,但如果你帮助我让它与 .htaccess 一起使用,我会这样做。

重要提示:它可以是 URL 中任意数量的变量,以任意顺序排列。 例子:

http://site.com/thread777/forum666
http://site.com/id555/thread777
http://site.com/forum666
http://site.com/id555/forum666/thread777/id333/id444/forum777

它们都必须像这样转换:

http://site.com/#thread=777#forum=666
http://site.com/#id=555#thread=777
http://site.com/#forum=666
http://site.com/#id555#forum=666#thread=777#id=333#id=444#forum=777

【问题讨论】:

    标签: url mod-rewrite apache2 config virtualhost


    【解决方案1】:

    我认为您的第二次尝试很接近。这个怎么样:

    RewriteRule ^(.*)/(id|forum|thread)([0-9]+)(.*) $1#$2=$3$4 [N,NC,NE,R=303]
    

    与您的规则一样,N 标志使规则根据需要多次重复,直到完成。在每次迭代中,它将最右边的 /id555 组或其他任何内容转换为 #id=555。

    ^(.*) = 尚未转变的领导小组(如果有的话)

    /(id|forum|thread)([0-9]+) = 本次迭代中正在处理的组

    (.*) = 已处理的尾随组(如果有)

    但是我认为在此之后,领先的/ 可能会消失,转换为#。因此,您可能需要按照上述规则将其重新添加

    RewriteRule (.*) /$1
    

    【讨论】:

    • 非常感谢,正是我所需要的。不需要第二条规则,因为您可以随时拖动 / 前面的 $1。同样在我的服务器和浏览器上,没有RewriteRule (.*) /$1 也没问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2012-12-14
    相关资源
    最近更新 更多