.htaccess 在 WP 網站正常工作時阻止網站工作,為什麼?
我有三個站點在具有專用 IP 地址的共享主機 (Bluehost) 中執行。說明如下:
example.com
=> 這是主站點和域,是一個 WPexample.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/plataforma
WP 位於/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 指令。注意IgnoreInherit
和InheritDown[Before]
是 Apache 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
文件的目錄的。