我想将我的所有内部页面(例如example.com/about
:)重定向到其非 www 版本,但我希望我的主页(https://example.com
)重定向到其 www 版本(https://www.example.com
)。
在网上查了很多文章,但是都没有效果。
如果设置了两条规则,那么内部页面就可以正常重定向,但主页会陷入循环。
我不知道如何编码,所以请你写下代码,然后粘贴到我的.htaccess
文件中
目前,我已将所有页面设置为重定向到非 www 版本(甚至主页),代码如下:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
</IfModule>
# BEGIN Sitepad
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
# END Sitepad
答案1
在网上查了很多文章,但是都没有效果。
可能是因为这是一个奇怪的要求。如果你能找到任何可以简单复制/粘贴的代码来实现这一点,我会感到惊讶。
但是,假设您正在为所有内部链接构建正确的绝对 URL(因为您不能在内部链接到重定向的 URL),那么.htaccess
如果您了解现有的指令,这实现起来相对简单。
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC] RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
正则.*
表达式RewriteRule
图案火柴一切。具体来说,它匹配 0 个或多个任意字符,如量词所示*
。它匹配空 URL 路径(即“主页”)和每个非空 URL 路径(即其他所有内容)。
您需要修改上述正则表达式,使其匹配非空 URL 路径(即除主页之外的所有内容)。并创建另一条规则(在另一个方向),仅匹配空 URL 路径。
index.php
(这利用了 mod_dir为主页请求提供服务的事实,而不是随后的 mod_rewrite 指令。)
要匹配 1 个或多个(即非空 URL 路径),您可以使用+
(加号)量词,而不是*
(星号/星号)。
例如:
# Redirect everything except the homepage (from www to non-www)
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.+)$ https://example.com/$1 [L,R=301]
# Redirect the homepage only (from non-www to www)
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^$ https://www.example.com/ [L,R=301]
您需要在测试之前清除浏览器缓存,因为之前将主页从 www 重定向到非 www 的 301(永久)重定向已被浏览器缓存。
首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。