Dot-Htaccess

.htaccess 在 WP 網站正常工作時阻止網站工作,為什麼?

  • November 9, 2016

我有三個站點在具有專用 IP 地址的共享主機 (Bluehost) 中執行。說明如下:

  • example.com=> 這是主站點和域,是一個 WP
  • example.net=> 這是一個附加域(不知道你是否熟悉這個術語)並且正在執行另一個 WP 站點
  • subsite.example.net=> 這是一個獨立的 PHP 應用程序

每個 WP 都有自己的.htacess文件,如下所示:

# BEGIN WordPress
<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /
   RewriteRule ^index\.php$ - [L]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule . /index.php [L]
</IfModule>  
# END WordPress

有了這個.htaccess文件,兩個 WP 站點都可以正常工作,但獨立應用程序不能。如果我刪除.htaccess文件,則相反,獨立應用程序可以工作,但 WP 網站不能。

任何人都可以幫助我找到解決此問題的方法嗎?

更新

我正在.htaccess為獨立 PHP 應用程序的文件使用以下配置:

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteBase /
   RewriteRule ^index\.php$ - [L]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule . index.php [L]

   # Add Caching.
   <FilesMatch ".(ico|jpg|jpeg|png|gif|js|css|swf)$">
       Header set Cache-Control "max-age=10800"
   </FilesMatch>

   # Prevent viewing of htaccess file.
   <Files .htaccess>
       order allow,deny
       deny from all
   </Files>

   # Prevent directory listings
   Options All -Indexes

   # Compress text, html, javascript, css, xml:
   AddOutputFilterByType DEFLATE text/plain
   AddOutputFilterByType DEFLATE text/html
   AddOutputFilterByType DEFLATE text/xml
   AddOutputFilterByType DEFLATE text/css
   AddOutputFilterByType DEFLATE application/xml
   AddOutputFilterByType DEFLATE application/xhtml+xml
   AddOutputFilterByType DEFLATE application/rss+xml
   AddOutputFilterByType DEFLATE application/javascript
   AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>

但不工作,因為我一點擊任何連結就被踢出應用程序。

獨立站點位於/public_html/plataformaWP 位於/public_html. 為什麼我在這一點上做錯了?

重要的是底層文件/目錄結構。如果這 3 個站點本質上在同一個帳戶上 - 同一個父目錄 - 那麼每個站點可能位於一個單獨的子目錄中(這通常是外掛和子域在共享環境中預設的方式)並且您應該.htaccess在每個子目錄中有一個單獨的文件。不是所有人。

**更新#1:**嘗試向 WordPress 添加一個例外,.htaccess以明確排除通過子域訪問的任何重寫。例如:

# BEGIN WordPress
<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /
   RewriteRule ^index\.php$ - [L]

   RewriteCond %{HTTP_HOST} !^subsite\.example\.net$ [NC]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule . /index.php [L]
</IfModule>  
# END WordPress

但是,這確實不是必需的,因為(如評論中所述),獨立應用程序.htaccess文件中的 mod_rewrite 指令應該完全覆蓋這些指令(因為獨立應用程序位於子目錄中)。

WordPress塊添加程式碼的另一個警告是,這可能會被下一次更新覆蓋。

**更新#2:**或者,嘗試將RewriteOptions指令添加到獨立應用程序的.htaccess文件(位於子目錄中):

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteOptions IgnoreInherit
   :

如果這可行,那麼似乎表明RewriteOptions InheritDown[Before]伺服器配置中有一個指令允許繼承父目錄中的 mod_rewrite 指令。注意IgnoreInheritInheritDown[Before]是 A​​pache 2.4+ 的特性。

(編輯:似乎 OP 在 Apache 2.2.31 上,因此上述指令會導致 500 Internal Server 錯誤。)

**更新#3:**您還可以嘗試RewriteBase /從兩個文件中刪除指令.htaccess並刪除 WordPressRewriteRule 替換中的斜杠前綴以匹配獨立應用程序.htaccess文件中的規則。因此,WordPress.htaccess文件變為:

# BEGIN WordPress
<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteRule ^index\.php$ - [L]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule . index.php [L]
</IfModule>  
# END WordPress

之前讀過的最後一行:(RewriteRule . /index.php [L]即帶有斜杠前綴)。斜杠表示相對於根的 URL 路徑,沒有斜杠它現在是相對於包含.htaccess文件的目錄的。

引用自:https://serverfault.com/questions/813919