.htaccess 非www到www重定向不工作的WordPress的子目录安装中的文章

lndjwyie  于 2022-11-16  发布在  WordPress
关注(0)|答案(3)|浏览(119)

我正在帮助一个网站,它有一个主/根网站以及一个子目录中的WordPress安装。主网站的.htaccess文件有规则将非www流量重定向到www:

RewriteCond %{HTTP_HOST} ^site\.com [NC]
RewriteRule (.*) http://www\.site\.com/$1 [R=301,L]

但是,这对WP站点没有影响。例如:

  • site.com重定向到www.site.com
  • site.com/some-content-belonging-to-root-site重定向到www.site.com/some-content..
  • site.com/wordpress重定向www.site.com/wordpress

我在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

kuuvgm7e

kuuvgm7e1#

事实证明,问题不在于重写条件或规则,而在于它们在.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>
mtb9vblg

mtb9vblg2#

请尝试:

RewriteCond %{HTTP_HOST} ^site\.com$ [NC]
RewriteRule (.*) http://www\.site\.com/wordpress/$1 [R=301,L]

并清除您的浏览器历史记录以确保。

czq61nw1

czq61nw13#

我也拥有一个WordPress网站,我正在寻找www到非www重定向为我的网站:fasterthemes.com网站托管在DigitalOcean上,经过几天的努力,我发现如果你在DNS设置中正确设置了A记录,那么所有可用的解决方案(.htaccess)代码都能正常工作。如果没有设置,那么重定向就不起作用!
所以在我的例子中,
1.我在我的Digitalocean DNS中创建了一个A记录,如下所示:
i.stack.imgur.com/ie7f8.png
1.我添加了以下代码:
重写引擎打开
重写Base/
重新写入条件%{HTTP_HOST} ^www.(.)$ [NC]
重写规则^(.
)$http://%1/$1 [R=301,L]
现在你可以看到,如果你浏览http://www.fasterthemes.com,它会把你重定向到fasterthemes.com。之前它抛出了一个错误。我希望这能有所帮助。

相关问题