我需要将形式为 subpage.php?sid=123 的 URL 重定向到命名页面。
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 行工作正常,并且我被重定向到默认地图 - /home,这表明地图文件有问题。
当我重新插入 RewriteMap 行时,我收到 500 内部服务器错误。我无法访问服务器日志,而且 RewriteLog 似乎根本不起作用。
我还尝试了以下替换逐一进行并一起尝试以尝试隔离问题:
RewriteMap subpagemap txt:/subpagemap.txt
RewriteCond %{THE_REQUEST} subpage\.php\?sid=([0-9]*)
RewriteRule ^.*$ /${subpagemap:1|home} [R=301,L,NC]
您知道可能是什么问题吗?
答案1
实际上,即使服务器支持它,问题在于您尝试在每个目录上下文中定义 RewriteMap(例如在 .htaccess 文件中),这是不允许的:http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteMap
将定义移至服务器或虚拟主机配置,它就应该可以工作了。
我仍然意识到你可能在一年半内就明白了:)
答案2
我发现答案是服务器主机不支持RewriteMap。
这浪费了大约 5 个小时的调试时间。