【问题标题】:Apache mod_rewrite and RewriteMap usageApache mod_rewrite 和 RewriteMap 的使用
【发布时间】:2009-08-03 08:52:58
【问题描述】:
Options +FollowSymLinks

RewriteEngine On
RewriteMap name2id txt:/path/to/map.txt

RewriteRule ^/mods/([^/]+)\.html$ /mod.php?id=${name2id:$1|0} [QSA,L]

第一次使用 rewriteMap 进行 URL 重写。我上面有一个代码,但如果我在浏览器中运行http://example.com/mysite/mods/abc.html,它会返回一个 404 页面。我已经将上面的代码放在我的虚拟主机文件中的 apache 配置中,我在一些论坛中读到 rewriteMap 只有在您可以访问 httpd.conf 和虚拟主机时才有效。 mod_rewrite 正在我的 Windows 机器上运行,因为我能够运行在我的 .htaccess 文件中定义的一些规则。

map.txt 包含

abc 123
def 456
ghi 789

【问题讨论】:

  • 您是否确保 mod_rewrite 运行正常且 Apache 允许 .htaccess 文件?
  • 是的,mod_rewrite 正在正常运行并允许 .htaccess 文件。我能够运行 htaccess 中定义的一些规则。

标签: apache mod-rewrite rewritemap


【解决方案1】:

如果您请求/mysite/mods/…,您的规则应该是:

RewriteRule ^/mysite/mods/([^/]+)\.html$ /mod.php?id=${name2id:$1|0} [QSA,L]

【讨论】:

  • 但我将我的 RewriteBase 声明为 /mysite。即使我添加 /mysite/mods/ 仍然显示 404.. 如果我的规则位于我的 htaccess 文件中并且 rewriteMap 的声明在我的虚拟主机中,那可以吗?
  • 您是否尝试过使用 ^mods 而不是 ^/mods 开始规则?
【解决方案2】:

如果您使用的是 RewriteBase,请尝试删除规则中的初始斜线:

RewriteRule ^mods/([^/]+)\.html$ /mod.php?id=${name2id:$1|0} [QSA,L]

【讨论】:

  • 我的代码正常工作,但是当我运行example.com/mysite/mods/abc.html 时,当我回显查询字符串 id 时得到 0,这是正确的吗?如果我错了,请纠正我,因为我预计将显示相当于 abc w/c is 123。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 2023-03-11
  • 2010-12-25
相关资源
最近更新 更多