使用 RewriteMap 减少重定向

Posted

技术标签:

【中文标题】使用 RewriteMap 减少重定向【英文标题】:Reduce redirects with RewriteMap 【发布时间】:2020-01-14 01:03:02 【问题描述】:

我在一个文件中有一个 RewriteMap,并且想要处理(忽略)可选的尾随斜杠。我想尽量减少尾部斜杠案例中的重定向数量。如何更改 apache-config?

配置:

<VirtualHost *:80>
ServerName redirtest.localhost
RewriteEngine on

RewriteMap test "txt:/tmp/redirects.txt"  #/old   /new
RedirectMatch ^/(.*?)/$ /$1
RewriteCond %REQUEST_URI           ^(.*)$
RewriteCond $test:%1|NOT_PRESENT  !NOT_PRESENT [NC]
RewriteRule .?                       $test:%1 [NC,R=301]

结果(正常):

curl -sIL 'http://redirtest.localhost/old?key=val&somemore=foobar' |grep Location 
Location: http://redirtest.localhost/new?key=val&somemore=foobar

以下工作,但我想避免中间重定向:

curl -sIL 'http://redirtest.localhost/old/?key=val&somemore=foobar' |grep Location
Location: http://redirtest.localhost/old?key=val&somemore=foobar
Location: http://redirtest.localhost/new?key=val&somemore=foobar

【问题讨论】:

【参考方案1】:

试试这个:

RewriteMap test "txt:/tmp/redirects.txt" 
RewriteCond %REQUEST_URI           ^(.*\w)/?$
RewriteCond $test:%1|NOT_PRESENT  !NOT_PRESENT [NC]
RewriteRule .?                       $test:%1 [NC,R=301]
RedirectMatch ^/(.*?)/$ /$1

【讨论】:

以上是关于使用 RewriteMap 减少重定向的主要内容,如果未能解决你的问题,请参考以下文章

重定向对象列表以使用 lambda 减少函数时出错

如何在 MFC 中重定向 TRACE 语句以减少来自 AfxDumpStack() 的数据流?

使用www从非www http重定向到https

节点重定向不适用于角度

HTTP 为什么要重定向?

将使用 axios 获取的 json 数据拆分为一个可点击的列表项,该列表项重定向到页面