【问题标题】:Apache RewriteRule woesApache RewriteRule 问题
【发布时间】:2015-01-08 20:00:43
【问题描述】:

我正在尝试为以下条件创建 Apache 重写规则:

原始网址: https://somewebsite.com/GCSWEB/runSavedReport.do?mode=excel&reportID=40678 新网址: https://somewebsite.com/demo/runSavedReport.do?mode=excel&reportID=40678

因此,只有在请求 /runSavedReport.do?mode=excel&reportID=xxxxx 时,/GCSWEB 网络路径才会被 /demo 替换。 URL 的所有其他部分将保持不变。我编写了以下代码,但它不起作用:

RewriteRule ^/GCSWEB/runSavedReport\.do\?mode=excel\&reportID=([0-9]+)$ https://somewebsite.com/demo/runSavedReport.do?mode=excel&reportID=$1 [R=301,L]

同样重要的是要注意我有另一个运行良好的现有规则,它将对 /GCSWEB/xxxx/xxx 的任何请求重定向到 /demo。但是,如果调用上面的特定 URL,我希望这个新规则覆盖现有规则。任何其他 URL 将下拉到现有规则并被重定向到简单的 /demo(没有其他添加到 URL)。现有规则如下所示:

RewriteRule ^/GCSWEB/(.*) https://somewebsite.com/demo/? [R=301,L]

整天都在研究新规则,但没有成功。我什至尝试删除现有规则,认为可能存在一些冲突,但这没有帮助。

【问题讨论】:

    标签: apache mod-rewrite redirect


    【解决方案1】:

    如果您有一个与 URL 匹配的现有规则,您应该在其中编写新的 规则

    此外,RewriteRule 匹配 URL 的查询部分。您应该改用 RewriteCond:

    RewriteCond %{QUERY_STRING} ^mode=excel&reportID=([0-9]+)$
    RewriteRule ^/GCSWEB/runSavedReport\.do$ /demo/runSavedReport.do?mode=excel&reportID=%1 [R=301,L]
    

    另外,由于协议(https)和域名(lhdata-dev.bankofamerica.com)都没有变化,所以不需要在重写部分指定。

    【讨论】:

    • 嗨@Bribo,如果这个或任何答案解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
    猜你喜欢
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    相关资源
    最近更新 更多