COi*_*Oil 4 mod-rewrite redirect virtualhost apache2
我实际上是RewriteMap
在我的 vhost 中使用一个指令来重定向 800 个 URL 的列表。它安静地工作:
RewriteEngine On
RewriteMap redirects dbm=db:/data/apps/project/current/configuration/etc/httpd/conf/redirects.db
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]
Run Code Online (Sandbox Code Playgroud)
我使用redirect.txt
包含映射的文件。然后将其转换为db文件:
httxt2dbm -f db -i /data/apps/project/current/configuration/etc/httpd/conf/redirects.txt -o /data/apps/project/current/configuration/etc/httpd/conf/redirects.db
Run Code Online (Sandbox Code Playgroud)
例如对于这种网址,就可以了:
/associations/old_index.php /
Run Code Online (Sandbox Code Playgroud)
但是当 URL 包含空格时它不起作用:(我想它与其他特殊字符相同)
/Universités%20direct /
Run Code Online (Sandbox Code Playgroud)
这个案子怎么处理?
小智 5
您可以使用第二个重写映射,内部函数 'escape' 这会将空格变成 %20:
RewriteMap ec int:escape
RewriteMap redirects dbm=db:/data/apps/project/current/configuration/etc/httpd/conf/redirects.db
RewriteCond ${redirects:${ec:$1}} !=""
RewriteRule ^(.*)$ ${redirects:${ec:$1}} [redirect=permanent,last]
Run Code Online (Sandbox Code Playgroud)
然后在您自己的重写映射数据库中,您可以拥有:
/Universités-direct%20/
Run Code Online (Sandbox Code Playgroud)
这应该匹配。