如何通过mod_rewrite替换转义的斜杠?

时间:2019-01-10 11:56:58

标签: apache mod-rewrite httpd.conf

我正在将带有奇怪的php脚本的旧Web服务器进行目录浏览迁移到具有标准目录浏览功能的apache httpd服务器。 旧脚本要求使用类似http://myserver/index.php?fm_dir=dir1%2Fsubdir1%2Fsubdir2的网址 现在应该用http://myserver/dir1/subdir1/subdir2

这样的网址代替

为了方便迁移,我尝试通过mod rewrite重写url。

我已经尝试了以下方法:

RewriteCond %{QUERY_STRING} ^fm\_dir\=(.*)$
RewriteRule index\.php$ /%1? [R]

但是转义的斜线仍然被转义,我得到了404(http://myserver/dir1%2Fsubdir1%2Fsubdir2)。

有人可以给我提示如何解决此问题。

1 个答案:

答案 0 :(得分:1)

RewriteCond %{QUERY_STRING} ^fm\_dir\=(.*)$
RewriteRule index\.php$ /%1? [NE,N]

# as long as there are two or more slashes, 
# replace only one and keep looping internally
RewriteRule ^(.*)\%2F(.*)\%2F(.*) $1/$2\%2F$3 [NE,N]

# when there is only one left, 
# replace that last one and send redirect to the client
RewriteRule ^(.*)\%2F(.*) $1/$2 [L,R=302]