Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
非www到www重定向不适用于WordPress子目录安装中的文章_Wordpress_.htaccess_Redirect_Web_Subdirectory - Fatal编程技术网

非www到www重定向不适用于WordPress子目录安装中的文章

非www到www重定向不适用于WordPress子目录安装中的文章,wordpress,.htaccess,redirect,web,subdirectory,Wordpress,.htaccess,Redirect,Web,Subdirectory,我正在帮助一个网站,它有一个主/根网站以及一个子目录中的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-behing-to-roo

我正在帮助一个网站,它有一个主/根网站以及一个子目录中的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-behing-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文件不被建议(但我认为在这种情况下这是不可避免的)

我将非常感谢任何关于如何修复重写条件或规则的建议,以成功重定向可湿性粉剂网站的帖子链接

谢谢

编辑/附加信息:我修改了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

试试:

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

并清理浏览器历史记录以确保。

事实证明,问题不在于重写条件或规则,而在于它们在.htaccess文件中出现的顺序

我读了一篇WP论坛的帖子,其中有人建议出于性能原因将重写移到文件的顶部。我试了一下,看看会发生什么,并注意到文章的URL受到了影响——虽然不是很好,但还是受到了影响。我得到了这样的东西:

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
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
重新编写引擎打开
重写cond%{SCRIPT_FILENAME}-F
重写cond%{SCRIPT_FILENAME}-D
重写规则^(.*)$index.php?/$1[L]
#开始WordPress
重新启动发动机
重写BASE/wordpress/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/wordpress/index.php[L]
#结束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>

重新启动发动机
重写BASE/wordpress/
重写cond%{HTTP_HOST}/wordpress^site\.com/wordpress[NC]
重写规则(.*)http://www\.site\.com/wordpress/$1[R=301,L]
重写cond%{SCRIPT_FILENAME}-F
重写cond%{SCRIPT_FILENAME}-D
重写规则^(.*)$index.php?/$1[L]
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/wordpress/index.php[L]

我还拥有一个WP网站,我正在为我的网站
cnaclasstests.com

该网站由DigitalOcean托管,经过几天的努力,我发现如果您在DNS设置中正确设置了A记录,所有可用的解决方案(.htaccess)代码都可以正常工作。如果未设置,则重定向不起作用

就我而言

  • 我在Digitalocean DNS中创建了一个记录,如下所示:
  • 我添加了以下代码:

    RewriteEngine On   
    RewriteBase /   
    RewriteCond              %{HTTP_HOST} ^www\.(.*)$ [NC]     
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    
  • 现在您可以看到,如果您浏览,它会将您重定向到cnaclasstests.com。早些时候,它抛出了一个错误。
    我希望这能有所帮助。

    在Wordpress中检查你的永久链接设置。@anubhava-谢谢你的建议。我没有想到这一点,但看起来它们已经指向了www URL。谢谢,但我注意到我已经实现了这一点。它适用于登录页,但不适用于文章。不同的是,标记美元符号。你试过这个吗?对不起,我完全错过了。我尝试了一下,无论是否使用$,它的工作方式似乎都是一样的。您的第一个示例也缺少美元,它作为变量发挥作用。我完全按照您使用美元符号(使用正确的域)编写的方式进行了尝试,但由于某些原因,它仍然无法捕获文章。根据你的建议,我也尝试了一下,但效果相同:RewriteCond%{HTTP\u HOST}/wordpress^site\.com/wordpress$[NC]RewriteRule(.*)\.site\.com/wordpress/$1[R=301,L]