在我正在处理的网站上,如果您输入网址加1个目录,htaccess会添加一个尾部斜杠。
所以,这个:http://www.mysite.com/shirts
成为:http://www.mysite.com/shirts/
运行该网站的htaccess非常漫长而复杂,因此很难找到或测试哪条规则导致重写。我能够找到这行代码的问题(我认为):
RewriteRule (.*) http://www.mysite.com/$1 [R=301,L]
此规则是否符合我上面描述的行为?这似乎是原因,但它对我来说没有道理意义。我不会理解尾随斜线的来源。
有人可以为我阐明这一点吗?提前谢谢。
编辑:更多:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mysite\.com$
RewriteRule (.*) http://www.mysite.com/$1 [R=301,L]
答案 0 :(得分:0)
默认情况下,apache会添加结尾/
,您必须使用:
DirectorySlash Off
禁用由mod_dir
,you can read more about it here.
但是,如果您尝试删除/
以修复未显示的图片。这不是正确的方法,您应该使用HTML base
标记,例如:
<BASE href="http://www.yourdomain.com/">
您当前的规则已经更新了您的问题:
RewriteCond %{HTTP_HOST} ^mysite\.com$
RewriteRule (.*) http://www.mysite.com/$1 [R=301,L]
意思是:
mysite.com
www.
如果你访问的话就是一个例子:
http://domain.com/blog/some_blog_article
它会将用户重定向到:
http://www.domain.com/blog/some_blog_article
请注意它如何保留所有内容,只将www.
添加到域中。
如果你真的想重定向它,不管这是一种方法:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
RewriteRule (.*) http://www.mysite.com/$1 [R=301,L]
# check if it is a directory
RewriteCond %{REQUEST_FILENAME} -d
# check if the ending `/` is missing and redirect with slash
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]
# if file or directory does not exist
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# and we still want to append the `/` at the end
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]