.htaccess摔倒在斜线上

时间:2011-07-18 08:54:24

标签: .htaccess

TL; DR

如何让.htaccesshttp://domain.com/images重写为http://domain.com/images/(即向没有网址的网址添加尾部斜杠)?网址可能比一个级别更深,例如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一起使用。

1 个答案:

答案 0 :(得分:1)

1)尝试此指令:Options +FollowSymLinks -MultiViews - 根据Apache配置,它可能是交易破坏者。

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

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

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


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