繁体   English   中英

如何从 htaccess 将子页面重定向到 www 到非 www

[英]how to redirect sub pages to www to non-www from htaccess

我正在尝试将我的子页面重定向到非 www,但我得到同一页面的重复 URL。

我想要实现的

https://www.example.com/category/webs => https://example.com/category/webs
http://example.com/category/webs => https://example.com/category/webs
http://www.example.com/category/webs => https://example.com/category/webs

.htaccess

Options -Indexes
RewriteEngine On

RewriteRule ^category/([a-zA-Z0-9-/]+) category-list.php?id=$1 [NC,L]

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^example\.com$
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
</IfModule>

使用此当前代码,我的根域可以完美重定向。 但不是子页面! 我读了很多文章但没有帮助

您发布的规则已经这样做了,但是您的规则顺序错误。 在将请求重写为category-list.php之前,您需要重定向请求。 否则,“子页面”将被重定向到category-list.php ,这是我假设正在发生的事情。

另外:您应该转义字符类([a-zA-Z0-9-/]+)中的文字连字符,或者将其移至字符类的开头或结尾,以否定其特殊含义。 您还应该在正则表达式的末尾包含字符串结尾的锚点,否则它将成功匹配太多(可能会创建重复的内容)。

试试这样:

Options -Indexes

RewriteEngine On

# Canonical redirect
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^example\.com$
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]

# Rewrite request
RewriteRule ^category/([a-zA-Z0-9/-]+)$ category-list.php?id=$1 [NC,L]

无需重复RewriteEngine指令。 不需要<IfModule>包装器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM