【问题标题】:.htaccess rewrite rule for /.htaccess 重写规则 /
【发布时间】:2011-12-29 16:38:07
【问题描述】:

我有一个网站,如果我访问 URL http://mysite.com/community,它会显示找不到页面。但是,URL http://mysite.com/community/ 正确显示了页面。如何在社区之后为那个“/”设置重写?

这是我现在的 .htaccess:

Options +FollowSymLinks
Options +Indexes
RewriteEngine On

RewriteRule ^admin$ Admin/index.php?qstr=$1 [L]
RewriteRule ^(.*)/$ index.php?qstr=$1 [L]

这些是我尝试过的,但失败了

首先,

RewriteRule  ^(.*)/community $1/community/ [L]

秒,

RewriteRule  /community /community/ [L]

所有有[L]的不同组合。

【问题讨论】:

  • 使用最后一个,但没有前导/
  • /community 应该去 index.php?qstr=community?
  • 看来我需要把它拼出来。所以RewriteRule community /community/ [L]

标签: .htaccess


【解决方案1】:

来自Apache URL Rewrite Guide

尾随斜线问题 说明:

每个网站管理员都可以为引用目录的 URL 的尾部斜杠问题唱一首歌。如果它们丢失,服务器会转储一个错误,因为如果你说 /~quux/foo 而不是 /~quux/foo/,那么服务器会搜索一个名为 foo 的文件。而且因为这个文件是一个它抱怨的目录。实际上,它在大多数情况下都会尝试自行修复,但有时需要您模拟这种机制。例如,在您对 CGI 脚本等进行了大量复杂的 URL 重写之后。

解决方案:

解决这个微妙问题的方法是让服务器自动添加尾部斜杠。要正确执行此操作,我们必须使用外部重定向,以便浏览器正确请求后续图像等。如果我们只进行内部重写,这仅适用于目录页面,但当任何图像包含在此页面中时会出错使用相对 URL,因为浏览器会请求内联对象。例如,在 /~quux/foo/index.html 中对 image.gif 的请求将变为 /~quux/image.gif 而没有外部重定向!

所以,为了实现这个技巧,我们编写:

重写引擎开启

RewriteBase /~quux/

重写规则 ^foo$ foo/ [R]

疯狂和懒惰的人甚至可以在其 homedir 的顶级 .htaccess 文件中执行以下操作。但请注意,这会产生一些处理开销。

重写引擎开启

RewriteBase /~quux/

RewriteCond %{REQUEST_FILENAME} -d

重写规则 ^(.+[^/])$ $1/ [R]

【讨论】:

    【解决方案2】:

    好吧,在尝试了上述所有解决方案以及我自己的一些解决方案之后,我终于解决了这个问题。我确信这不是一个完整的解决方案,但它确实暂时解决了它。

    解决方案:刚刚在根文件夹中创建了一个名为“community”的空目录。就是这样!

    但我仍在寻找解决此问题的实际方法。

    【讨论】:

      猜你喜欢
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多