在.htaccess的RewriteMap问题

我需要将表单subpage.php?sid = 123的URLredirect到指定页面。

subpagemap.txt存在于根目录下,只包含以下由Unix行结尾分隔的\ n:

1 a 2 b 3 c 

.htaccess如下所示:

 Options +FollowSymlinks RewriteEngine On RewriteBase / RewriteMap subpagemap txt:subpagemap.txt RewriteCond %{THE_REQUEST} subpage\.php\?sid=([0-9]*) RewriteRule ^.*$ ${subpagemap:%1|home}? [R=301,L,NC] 

问题是我得到一个500内部服务器错误。

当我注释掉.htaccess的第4行时,第5行工作正常,我redirect到默认映射 – / home,这表明它是映射文件,这是问题所在。

一旦我把RewriteMap行回来,我得到一个500内部服务器错误。 我没有访问服务器日志和RewriteLog似乎并没有工作。

我也尝试了下面的replace,一起来试图隔离这个问题:

 RewriteMap subpagemap txt:/subpagemap.txt RewriteCond %{THE_REQUEST} subpage\.php\?sid=([0-9]*) RewriteRule ^.*$ /${subpagemap:1|home} [R=301,L,NC] 

任何想法可能是什么问题?

实际上,即使服务器支持它,问题在于你正在尝试在每个目录上下文中定义RewriteMap(例如,在.htaccess文件中),这是不允许的: http : //httpd.apache.org/docs /1.3/mod/mod_rewrite.html#RewriteMap

将定义移动到服务器或虚拟主机configuration,它应该工作。

我仍然认识到你可能已经在一年半的时间里想通了:)

我发现答案是服务器主机不支持RewriteMap。

浪费了5个小时左右的debugging时间。