Apache htaccess文件重定向非www和https请求,并重写URL
我正在尝试创建我的第一个.htaccess来进行URL重写和其他事情,但我已经浪费了两天时间搜索信息并试图使其工作,但没有成功 我希望达到以下目标: 1)将所有非www URL重定向到www URL(这似乎是seo的最佳实践?) 2)将所有https请求重定向到http请求:Apache htaccess文件重定向非www和https请求,并重写URL,apache,.htaccess,url,redirect,rewrite,Apache,.htaccess,Url,Redirect,Rewrite,我正在尝试创建我的第一个.htaccess来进行URL重写和其他事情,但我已经浪费了两天时间搜索信息并试图使其工作,但没有成功 我希望达到以下目标: 1)将所有非www URL重定向到www URL(这似乎是seo的最佳实践?) 2)将所有https请求重定向到http请求: https://www.domain.com --> http://www.domain.com https://domain.com --> http://www.domain.com ww
https://www.domain.com --> http://www.domain.com
https://domain.com --> http://www.domain.com
www.domain.com/abc --> www.domain.com/index.php?page=abc
www.domain.com/abc/ --> www.domain.com/abc
3)将我的URL重写为SEO友好型,并最终去掉地址末尾的任何尾随斜杠:
https://www.domain.com --> http://www.domain.com
https://domain.com --> http://www.domain.com
www.domain.com/abc --> www.domain.com/index.php?page=abc
www.domain.com/abc/ --> www.domain.com/abc
到目前为止,我所掌握的是三个片段,它们各自发挥作用:
# 1) This should be correct, I hope!
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
这在一定程度上是有效的:它满足了我的要求,但当我在SEO友好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文件或图像的相对路径问题当然位于尾部斜杠中。浏览器认为他在子文件夹中,并将css文件的相对路径附加到当前位置,这将导致
www.domain.com/abc/styles/style.css
而不是
www.domain.com/styles/style.css
有两种方法可以解决此问题:
RewriteRule ^([^/\.]+)/?$ http://%{HTTP_HOST}$1 [R=301,L]
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\u HOST}/$1[R=301,L]
,但这是一个简单的修复方法。不幸的是,如果我放入类似https://domain.com/abc/
对不起,我的错。这是对我的虚拟服务器愚蠢的错误配置。它的工作100%完美,非常感谢你,现在这些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]