htaccess文件重定向非www和https请求,并重写URL

问题描述:

我想创建我的第一个.htaccess使URL重写和其他的东西,但我浪费了两天的搜索信息,并试图使它没有成功。htaccess文件重定向非www和https请求,并重写URL

我想什么来实现如下:

1)所有非www网址重定向到WWW网址(似乎对SEO最佳实践)

domain.com --> www.domain.com 

2)重定向所有HTTPS请求到http的:

https://www.domain.com --> http://www.domain.com 
https://domain.com  --> http://www.domain.com 

3)重写我的网址是搜索引擎友好,并最终在地址的末端剥去任何尾随斜线:

www.domain.com/abc --> www.domain.com/index.php?page=abc 
www.domain.com/abc/ --> www.domain.com/abc 


我有什么事这么远,是其采取单独3段工作:

# 1) This should be correct, I hope! 
RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 


# 2) This seems to work 100% right 
RewriteEngine On 
RewriteCond %{HTTPS} =on 
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R,L] 


#3) Major issues here 
RewriteEngine On 
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [L] 

此工程部分:它做我想要什么,但我得到当我把尾随斜线的搜索引擎友好的URL毕竟相对路径细分:

www.domain.com/abc  OK 
www.domain.com/abc/  page gets displayed but all relative URL for css and images are broken 


我甚至不知道如何将单个htaccess文件中的不同规则结合起来,以使它们正确交互。

对不起,长期的解释,这个问题对我来说变得相当令人沮丧。

与css文件或图像的相对路径的问题当然是位于尾部的斜线。浏览器会认为他是一个子文件夹的附加相对pathes的CSS文件到您的当前位置,这将导致

www.domain.com/abc/styles/style.css 

,而不是

www.domain.com/styles/style.css 

有两种方法,来解决这个:

  1. 我的首选解决方案是使所有的路径在html绝对。
  2. 重定向到相同的路径而没有结尾的斜杠。既然你似乎忽略了斜线,这应该没有副作用。匹配规则是这样的

    RewriteRule ^([^/\.]+)/?$ http://%{HTTP_HOST}$1 [R=301,L] 
    

你完全htaccess的文件将是这样一个:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

RewriteCond %{HTTPS} =on 
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R,L] 

RewriteRule ^([^/\.]+)/$ http://%{HTTP_HOST}$1 [R=301,L] 
RewriteRule ^([^/\.]+)$ index.php?page=$1 [L] 
+0

谢谢您的答复。这里有一个缺少的斜线'RewriteRule ^([^/\。] +)/ $ http://%{HTTP_HOST}/$ 1 [R = 301,L]'但这是一个简单的修复。不幸的是,https重定向不会发生,如果我把'https:// domain.com/abc /' – Eggplant 2013-02-09 11:00:49

+0

的东西抱歉,我的坏。这是我虚拟服务器的一个愚蠢的错误配置。它工作100%完美,非常感谢,现在这些htaccess文件对我来说似乎更容易理解!再次感谢。 – Eggplant 2013-02-09 11:52:20