【问题标题】:Apache modrewrite htaccess problemApache mod_rewrite htaccess 问题
【发布时间】:2009-08-22 13:46:00
【问题描述】:

我有一个规则,最多包含三个部分,由 /(斜杠)分隔。 它们代表/app/controller/action,但它们是可选的,即//app/app/controller 也可以。

问题是,我想要另一个规则,在这条规则之前,它将默认应用程序设置为“前端”,我认为它应该如下所示:

RewriteRule ^(.*)$ frontend/$1

但是,如果我有 /part1 网址,一切正常,它会以 /frontend/part1 的形式接收。但是,如果 url 包含 /(斜杠),例如 /part1/part2 ,我会收到 500 内部错误。如果我删除此规则,则最初的规则与 /frontend/part1/part2 一起使用,因此问题出在此规则之内。似乎 $1 不接受其中的斜线。这是众所周知的事实吗?

而且,如果当前 url 已经以 frontend/ 开头,我希望不运行此规则,我在想这样的事情:

RewriteRule ^frontend(/.*)?$ frontend$1 [S=1]

或者这可以用 RewriteCond 更优雅地完成吗?

谢谢!

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    试试这个规则:

    RewriteCond $0 !^frontend/
    RewriteRule .* frontend/$0 [L]
    

    【讨论】:

    • 谢谢!!!它似乎工作。但是你能快速解释一下为什么我的不工作或者你和我的解决方案有什么区别吗? $0 表示所有查询,对吧?
    • 您的解决方案可能导致无限循环。但我的规则排除了任何以frontend/ 开头的匹配项,以重写为frontend/…。而且,是的,$0 包含整个模式的匹配项。
    猜你喜欢
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2011-08-10
    • 2012-02-16
    相关资源
    最近更新 更多