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
有两种方法,来解决这个:
- 我的首选解决方案是使所有的路径在html绝对。
-
重定向到相同的路径而没有结尾的斜杠。既然你似乎忽略了斜线,这应该没有副作用。匹配规则是这样的
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]
谢谢您的答复。这里有一个缺少的斜线'RewriteRule ^([^/\。] +)/ $ http://%{HTTP_HOST}/$ 1 [R = 301,L]'但这是一个简单的修复。不幸的是,https重定向不会发生,如果我把'https:// domain.com/abc /' – Eggplant 2013-02-09 11:00:49
的东西抱歉,我的坏。这是我虚拟服务器的一个愚蠢的错误配置。它工作100%完美,非常感谢,现在这些htaccess文件对我来说似乎更容易理解!再次感谢。 – Eggplant 2013-02-09 11:52:20