.htaccess 中的 RewriteMap 问题

.htaccess 中的 RewriteMap 问题

我需要将形式为 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 个小时的调试时间。

相关内容