如何让.htaccess
将http://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
一起使用。
答案 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失败的原因正确重写。每个服务器都可以配置不同,因此在您的情况下,相同的规则可能会有所不同。