Htaccess - 重写引擎(逆向工程一行代码)

时间:2014-03-20 18:32:39

标签: .htaccess mod-rewrite rewrite

在我正在处理的网站上,如果您输入网址加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]

1 个答案:

答案 0 :(得分:0)

默认情况下,apache会添加结尾/,您必须使用:

DirectorySlash Off

禁用由mod_diryou can read more about it here.

引起的行为

但是,如果您尝试删除/以修复未显示的图片。这不是正确的方法,您应该使用HTML base标记,例如:

<BASE href="http://www.yourdomain.com/">

Read more here about it.


您当前的规则已经更新了您的问题:

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]