我正在尝试为以下条件创建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 Web路径才会被/ 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将下拉到现有规则,并被重定向到简单/演示(没有其他URL添加)。现有规则如下所示:
RewriteRule ^/GCSWEB/(.*) https://somewebsite.com/demo/? [R=301,L]
整天都在制定新规则但没有成功。我甚至试图删除现有的规则,认为可能存在一些冲突,但这没有帮助。
答案 0 :(得分:0)
如果您的现有规则与该网址匹配,则应该在其中编写新的 。
此外,RewriteRule 不会匹配网址的查询部分。你应该使用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
)中都没有变化,因此无需在重写部分中指定它们。