【问题标题】:mod_alias RedirectMatch all urls except onemod_alias Redirect 匹配除一个以外的所有 url
【发布时间】:2013-06-17 05:10:07
【问题描述】:

我想将所有页面重定向到带有路径的维护站点

/software/web/app.php/update

所以我需要重定向所有页面,除了网站本身,否则我会得到一个重定向循环,这意味着我需要一个匹配该路径并否定它的规则。听起来很简单,但对我不起作用。

RedirectMatch (?!/software/web/app.php/update) h*tp://abc.de/software/web/app.php/update

RedirectMatch ^(?!/software/web/app.php/update)$ h*tp://abc.de/software/web/app.php/update

RedirectMatch ^/software/web/app.php(?!/update)$ h*tp://abc.de/software/web/app.php/update

这些都没有帮助。我几乎尝试了在这里和其他网站上找到的所有内容,但经过数小时的试用,我投降并恳请您的帮助。提前谢谢你。

【问题讨论】:

    标签: apache mod-rewrite apache2 mod-alias


    【解决方案1】:

    你可以通过一个简单的带有条件前缀的 RewriteRule 来做到这一点:

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !(^/software/web/app.php/update$)
    RewriteRule .* /software/web/app.php/update [R=307]
    

    如果维护站点包含图像之类的内容,则您需要从规则中排除这些图像,例如:

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !(^/images/maintaining.jpg$)
    RewriteCond %{REQUEST_URI} !(^/software/web/app.php/update$)
    RewriteRule .* /software/web/app.php/update [R=307]
    

    如果你正在重定向到另一个站点,那么可以使用该规则来放置整个 URL:

    RewriteRule .* http://example.com/software/web/app.php/update [R=307]
    

    作为参考,RewriteRule 末尾的 [R=307] 表明浏览器会看到 URL 被重写,但这是一个临时重定向。

    【讨论】:

    • 感谢您的回答。你的回答是否暗示它不能用 RedirectMatch 来完成?
    • 嗨。我并没有真正使用过 RedirectMatch,我只是认为这是一个不错的选择。由于 RedirectMatch 使用 PCRE,它使“否定”字符串变得棘手 - 否定前瞻是您的最佳选择。也许尝试以下匹配:^(?!/software/web/app.php/update).*?不要将此作为答案,因为我无法使用 RewriteMatch 对其进行测试,但是当我通过 grep 运行它时它可以工作。
    • 为了只匹配 app.php 的一部分,我这样做了:RedirectMatch ^(?!/software/web/app.php/update)(?=/software/web/app.php).* h*tp://abc.de/software/web/app.php/update 或者像你建议的 mod_rewrite:RewriteEngine on RewriteCond %{REQUEST_URI} !(^/software/web/app\.php/update$) RewriteCond %{REQUEST_URI} ^/software/web/app\.php.*$ RewriteRule .* /software/web/app.php/update [R=307] 这样所有其他文件(jpg、css、js)都可以正常工作。感谢您的帮助!
    • 更简单:RedirectMatch ^/software/web/app.php(?!/update).* http://abc.de/software/web/app.php/update
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2011-03-28
    • 2019-07-13
    • 1970-01-01
    • 2021-06-06
    • 2015-12-07
    相关资源
    最近更新 更多