0

我正在尝试创建我的第一个 .htaccess 来进行 URL 重写和其他事情,但是我浪费了两天时间搜索信息并试图让它工作但没有成功。

我想要达到的目标如下:

1)将所有非www URL重定向到www URL(这似乎是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) 将我的 URL 重写为对 SEO 友好,并最终去掉地址末尾的任何尾随斜杠:

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]


# 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]

这部分有效:它可以满足我的要求,但是当我在 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 文件中组合不同的规则以使它们正确交互。

抱歉,解释太长了,这个问题让我感到非常沮丧。

4

1 回答 1

2

css 文件或图像的相对路径的问题当然位于尾部斜杠中。浏览器认为他在子文件夹中,并将 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]
于 2013-02-09T10:27:56.727 回答