[英]non-www to www redirect not working for articles in subdirectory installation of WordPress
我正在帮助一个具有主/根网站以及子目录中的WordPress安装的网站。 主站点的.htaccess文件具有将非www流量重定向到www的规则:
RewriteCond %{HTTP_HOST} ^site\.com [NC]
RewriteRule (.*) http://www\.site\.com/$1 [R=301,L]
但是,这对WP网站没有影响。 例如:
我在WordPress .htaccess中添加了类似的规则,尝试获得我期望的结果,但是我能想到的最好的方法是:
RewriteCond %{HTTP_HOST} ^site\.com [NC]
RewriteRule (.*) http://www\.site\.com/wordpress/$1 [R=301,L]
...成功将site.com/wordpress重定向到www.site.com/wordpress,但没有将site.com/wordpress/a-blog-post重定向。
我觉得我肯定缺少一些简单或明显的东西,但是经过数小时的实验和研究并没有产生任何结果,只是不建议在子目录中使用.htaccess文件(但在这种情况下,我认为这是不可避免的)。
对于如何解决重写条件或规则以成功重定向WP网站的帖子链接的任何建议,我将不胜感激。
谢谢!
编辑/其他信息:我修改了RewriteCond以更好地匹配传入的URL,认为这样做可能有所帮助,但是效果相同。 基本的WordPress URL已被重写,但文章URL却没有:
RewriteCond %{HTTP_HOST}/wordpress/.* ^site\.com/wordpress/.* [NC]
RewriteRule (.*) http://www\.site\.com/wordpress/$1 [R=301,L]
我认为这无关紧要,但以防万一,我会提到文章URL如下所示:site.com/wordpress/2014/05/16/article-slug
事实证明,问题不在于重写条件或规则,而是它们在.htaccess文件中出现的顺序 。
我读了一个WP论坛帖子,其中有人出于性能原因建议将重写内容移到文件顶部。 我试了一下只是为了看看会发生什么,并注意到文章的URL受到了影响-并不是很好,但是仍然受到了影响。 我得到这样的东西:
www.site.com/wordpressindex.php?/2014/05/16/article-slug
给定一个不存在的目录或文件,存在一些重写规则来重写基础并重定向到索引,这正是上面构建乱码的URL。
万一碰巧对其他人有帮助,我从一个看起来像这样的.htaccess文件开始:
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>
# END WordPress
并最终将其重新排列为如下所示,现在可以正确地将所有与博客相关的URL重定向到www站点:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteCond %{HTTP_HOST}/wordpress ^site\.com/wordpress [NC]
RewriteRule (.*) http://www\.site\.com/wordpress/$1 [R=301,L]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>
尝试:
RewriteCond %{HTTP_HOST} ^site\.com$ [NC]
RewriteRule (.*) http://www\.site\.com/wordpress/$1 [R=301,L]
并确认您的浏览器历史记录。
我还拥有一个WP网站,并且我一直在寻找www到非www重定向的网站cnaclassestests.com
该网站托管在DigitalOcean中,经过几天的努力,我发现如果您在DNS设置中正确设置了A记录,那么所有可用的解决方案(.htaccess)代码都可以正常工作。 如果未设置,那么重定向将不起作用!
所以就我而言
我添加了以下代码:
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www\\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
现在,您可以查看是否浏览了http://www.cnaclassestestss.com ,它会将您重定向到cnaclassestests.com。 之前它抛出了一个错误。 我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.