簡體   English   中英

非www到www重定向不適用於WordPress子目錄安裝中的文章

[英]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網站沒有影響。 例如:

  • 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

事實證明,問題不在於重寫條件或規則,而是它們在.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)代碼都可以正常工作。 如果未設置,那么重定向將不起作用!

所以就我而言

  1. 我在Digitalocean DNS中創建了一個A記錄,如下所示:

  1. 我添加了以下代碼:

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM