在WordPress多站點中使用HTACCESS將子目錄新增至WP-CONTENT URL
P粉917406009
P粉917406009 2024-01-02 13:50:59
0
1
811

我正在將我的單一網站 WordPress 安裝轉換為多網站。我正在嘗試修復主網站上損壞的 CSS/JS。

我的網路上目前有兩個網站:

  • http://www.example.com(主要)
  • http://dev.example.com(次要)

我的多網站安裝位於我們稱為「wordpress」的子目錄內。所以檔案路徑看起來像 public_html/wordpress

我的目標是兩個網站的 URL 中都不包含「wordpress」子目錄。除了主網站上的 CSS 和 JS 損壞(輔助網站看起來很好)之外,一切似乎都正常。

檢查程式碼時,所有 CSS 和 JS 呼叫都指向 http://www.example.com/wp-content/,但在那裡找不到檔案。如果我在瀏覽器中造訪 http://www.example.com/wordpress/wp-content ,就會找到這些檔案。我想隱藏 wordpress 資料夾,但仍然能夠檢索文件。

我對如何設定 HTACCESS 檔案感到困惑。我已經對其進行了一些初步更改,以便使子目錄中的多站點正常工作。這些都是我在 StackOverflow 和其他線上網站上找到的關於如何將網站移至具有子目錄的多網站並隱藏子目錄的指南。我還沒有找到任何有關解決 CSS/JS 損壞問題的資訊。

我認為我需要更新 3 個 HTACCESS 檔案中的一個或多個。

1.) public_html/.htaccess

#
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/wordpress/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /wordpress/
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ /wordpress/index.php [L] 
</IfModule>

2.) public_html/wordpress/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /wordpress/
RewriteRule ^index.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)  [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*.php)$  [L]
RewriteRule . index.php [L]
</IfModule>

3.) public_html/wordpress/wp-content/.htaccess 該檔案不存在,但我建立了它。我的想法是,在沒有 wordpress 子目錄的情況下調用文件,但它們需要表現得像包含子目錄一樣。例如,目前 http://www.example.com/wp-content/uploads/image.jpg 已損壞,但 http://www.example.com/wordpress/wp-content/uploads/image.jpg 可以工作。我希望它是相反的,或者我希望兩條路徑都有效。

<IfModule mod_rewrite.c>
RewriteEngine on
# ADD WORDPRESS IF URL DOES NOT HAVE IT
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/wordpress/
RewriteRule ^(.*)$ /wordpress/
</IfModule>

我嘗試在各種 HTACCESS 檔案中新增不同的行,但沒有一個起作用。我也不確定應該插入新規則的行號。我的新規則之一可能是正確的,但位置錯誤。下面是我真正認為可行但沒有實現的一個。

RewriteRule ^/wp-content/(.*)$ /wordpress/wp-content/ [R=301,NC,L]


#
P粉917406009
P粉917406009

全部回覆(1)
P粉930448030

首先,您應該刪除所有 .htaccess 文件,只保留根目錄中的一個:public_html/.htaccess

其次,您的最後一條規則不起作用,因為稍微錯誤。

您應該將其更改為:

RewriteRule ^/wp-content/(.*)$ /wordpress/wp-content/ [R=301,NC,L]

致:

RewriteRule ^wp-content/(.*)$ wordpress/wp-content/ [L,NC]

因為你不需要起始/,也不需要301重定向。您希望隱藏wordpress 資料夾,並將請求的網址從wp-content/(.*) 對應到wordpress/wp-content/$1程式碼>

此外,此規則必須是 .htaccess 檔案中的第一個規則,其優先順序高於以下預設 WordPress 規則。來自 public_html/ 的最終且唯一 .htaccess 應如下所示:

RewriteEngine On
RewriteBase /
RewriteRule ^wp-content/(.*)$ wordpress/wp-content/ [L,nc]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

希望對你有幫助。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!