【问题标题】:.htaccess falling over on trailing slash.htaccess 落在斜杠上
【发布时间】:2011-07-18 08:54:23
【问题描述】:

TL;DR

如何让.htaccesshttp://domain.com/images 重写为http://domain.com/images/(即在没有斜杠的情况下向URL 添加斜杠)? URL 可以比一层更深,例如http://domain.com/images/page/1

更多信息

假设我有一个这样的网址:

http://jamwaffles2/wallpapers

这将在 URL 栏中重定向到这个,重写规则工作正常:

http://jamwaffles2/wallpapers/?page=wallpapers

然而

http://jamwaffles2/wallpapers/(注意斜线)

改写成

http://jamwaffles2/index.php?page=wallpapers(用户不可见)

地址栏中有一个漂亮的http://jamwaffles2/wallpapers/

这里的问题是,当 URL 没有尾部斜杠时,地址栏中的 URL 会变成一个不太漂亮的 URL。有人可以提供解决方案吗?

这是我的 .htaccess:

# turn rewriting on
RewriteEngine on

RedirectMatch permanent ^/$ http://jamwaffles2/home

Options +FollowSymLinks

RewriteRule ^([^/\.]+)/?$ /index.php?page=$1 [L,NC,QSA]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ /index.php?page=$1&var1=$2 [L,NC,QSA]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ /index.php?page=$1&var1=$2&var2=$3 [L,NC,QSA]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ /index.php?page=$1&var1=$2&var2=$3&var3=$4 [L,NC,QSA]

附带说明,URL 有更多级别; .htaccess 应该使这一点显而易见(例如http://jamwaffles2/home/page/2)。

编辑

奇怪的是,这只发生在/wallpapers。如果我输入http://jamwaffles2/home,它会按预期工作,但不适用于http://jamwaffles2/wallpapers

【问题讨论】:

  • 您是否有名为wallpapers.php 或类似名称的文件?
  • 我愿意,这就是这个 .htacces 应该通过 /index.php 打开的内容。它适用于与wallpapers.php 相同目录中的页面,例如home.php.

标签: .htaccess


【解决方案1】:

1) 试试这个指令:Options +FollowSymLinks -MultiViews -- 根据 Apache 配置,它可能会破坏交易。

2) 使用此代码(可能的变体之一)仅为不存在的资源添加尾部斜杠:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]

它将重定向(301 永久重定向),因此 URL 将在浏览器中更改(例如 example.com/hello => example.com/hello/)。


如果仍然无法正常工作(无论是什么原因)——如果你可以编辑 Apache 配置文件——请启用重写调试 (RewriteLogLevel 9) 并检查重写日志以查看为什么某些 URL 无法正确重写.每台服务器都可以进行不同的配置,因此在您的情况下,相同的规则可能会有所不同。

【讨论】:

  • 非常感谢 LazyOne。我现在实际上已经解决了这个问题——这是由于 Apache 缓存了旧版本的文件,或者其他原因;它现在工作正常:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多