【问题标题】:How does RewriteRule work?RewriteRule 是如何工作的?
【发布时间】:2023-03-07 03:11:01
【问题描述】:

我就是不明白:

Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteBase /

RewriteRule ^([a-z]+\-[0-9]+)/?$ $1/home/ [R]
RewriteRule ^[a-z]+\-([0-9]+)/(home|alone)/?$ /$2.php?id=$1 [L]
RewriteRule ^.*$ http://www.anotherdomain.com/ [R=301]

为什么总是处理最后一条规则(最后是指重定向到 anotherdomain.com)?

我需要这样的东西:

http://mydomain.com/some-344 ---> http://mydomain.com/some-344/home/
http://mydomain.com/some-344/ ---> http://mydomain.com/some-344/home/
http://mydomain.com/some-344/home/ ---> home.php?id=344
http://mydomain.com/some-344/alone/ ---> alone.php?id=344
http://mydomain.com/anythingelse... --> http://www.anotherdomain.com/

谢谢!

【问题讨论】:

    标签: mod-rewrite


    【解决方案1】:

    总是处理最后一条规则,因为^.*$ 总是匹配的。虽然您在第二条规则中指定了 L 标志,但它可能是 doesn't work quite like you expect

    确保在重定向到本地路径时包含前导斜杠也是一个好主意,并且通常在重定向时指定L 标志,以便立即进行重定向。目前,一切正常,但如果您查看引擎盖下正在进行的处理,就会发现它做的事情比必要的要混乱一些。

    就您的实际问题而言,根据对服务器的原始请求调整包罗万象的重定向应该可以得到您想要的:

    RewriteEngine on
    RewriteBase /
    
    RewriteRule ^([a-z]+\-[0-9]+)/?$ /$1/home/ [R,L]
    RewriteRule ^[a-z]+\-([0-9]+)/(home|alone)/?$ /$2.php?id=$1
    
    RewriteCond %{THE_REQUEST} !^[A-Z]+\s/[a-z]+\-[0-9]+/(home|alone)/?
    RewriteRule ^.*$ http://www.anotherdomain.com/ [R=301,L]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 2021-12-29
      • 2016-09-17
      • 2014-12-10
      相关资源
      最近更新 更多