我無法編輯 .htaccess 檔案。我在 php slim 框架中創建了一個完整的網站(我們稱之為網站 S)。我的客戶有一個 wordpress 網站(我們稱之為網站 W),其中包含指向我的網站 S 的鏈接。我將網站 S 的所有檔案復制到網站 W 根目錄的目錄中。
我的想法是更改follow htaccess(由wordpress創建)以允許公眾訪問該目錄,而不會在網站S內移動造成任何問題。
首先.htaccess
RewriteEngine On
RewriteCond %{ENV:HTTPS} !on [NC]
RewriteCond %{QUERY_STRING} !wc-api [NC]
RewriteCond %{HTTP_HOST} ^website.pe$ [OR]
RewriteCond %{HTTP_HOST} ^www.website.pe
RewriteRule ^(.*)$ https://website.pe/$1 [R=301,L,NE]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
然后,我想我可以在網站 S 所在的目錄中使用適合它的典型 htaccess。 編輯我添加了網站 S 的結構。 index.php 在那里的公共目錄中。
第二個.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(/. )/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteBase /
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>
我嘗試了不同的方法,但還是收到訊息“禁止您無權訪問此資源。” 或者進入但網站 W 停止作業。
有什么建議?提前致謝。
uj5u.com熱心網友回復:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI}::$1 ^(/. )/(.*)::\2$ RewriteRule ^(.*) - [E=BASE:%1] RewriteBase / #RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L] </IfModule>
在您發布的配置中,您只需RewriteBase /要從.htaccess“slim”子目錄中的第二個檔案中洗掉指令。這會導致對您的小型網站的請求通過檔案根目錄中的 WordPress 站點路由回(這可能會導致 404)。
我的想法是更改follow htaccess(由wordpress創建)以允許公眾訪問該目錄而不會在網站S內部移動造成任何問題
您不需要接觸.htaccess檔案根目錄中的 WordPress檔案。這已經允許您訪問網站 S。
默認情況下,.htaccessslim 子目錄中的檔案(或者更確切地說,mod_rewrite 指令)將完全覆寫.htaccess根目錄中的 WordPress檔案。
因此,您需要在現有指令之前在slim 子目錄(有區別*1)中重復 HTTP 到 HTTPS 重定向。據推測,目的也是將 www 重定向到非 www?盡管您當前的重定向(在根.htaccess檔案中)沒有正確執行此操作。
例如,在.htaccessslim 目錄中的第二個檔案的頂部添加以下內容:
# Redirect HTTP to HTTPS and www to non-www
RewriteCond %{ENV:HTTPS} !on [NC,OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(website\.pe) [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
*1請注意使用REQUEST_URI變數而不是$1根.htaccess檔案中使用的反向參考。這在子目錄中使用時是必需的,否則,重定向的 URL 中將省略子目錄。
注意:首先使用 302(臨時)重定向進行測驗以避免快取問題。
更新:
但是我不能讓網站 S 運行,因為網站 S 目錄中存在一個帶有 index.php 的公共子目錄,排列如下:
website.pe/ (website W wordpress) -slimdirectory/ (website S slim) --vendor/ --public/ ---css/ ---fonts/ ---images/ ---js/ ---index.php --bootstrap/ ---app.php --etc..
這是您最初的問題中缺少的一個相當重要的資訊。我假設public子目錄不是可見 URL 的一部分,在這種情況下.htaccess,slim 子目錄(的父目錄public)中的第二個檔案應該是這樣的:
# /slimdirectory/.htaccess
RewriteEngine On
# Redirect HTTP to HTTPS and www to non-www
RewriteCond %{ENV:HTTPS} !on [NC,OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(website\.pe) [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
# Calculate base directory
RewriteCond %{REQUEST_URI}::$1 ^(/. )/(.*)::\2$
RewriteRule (.*) - [E=BASE:%1]
# Slim front-controller
RewriteRule ^public/index\.php - [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . public/index.php [L]
RewriteRule ^$ public/index.php [L]
該QSA標志不是必需的。
您不需要<IfModule>包裝器。
uj5u.com熱心網友回復:
是的 MrWhite,我在第二個 .htaccess 中洗掉了RewriteBase /,現在我可以訪問我用于測驗的纖薄網站所在目錄中的一個簡單的 index.html。
但是我不能讓網站 S 運行,因為網站 S 目錄中存在一個帶有 index.php 的公共子目錄,排列如下:
website.pe/ (website W wordpress)
-slimdirectory/ (website S slim)
--.htacess
--vendor/
--public/
---css/
---fonts/
---images/
---js/
---index.php
--bootstrap/
---app.php
--etc..
我是 htaccess 的新手,不明白一個 htaccess 如何覆寫另一個,所以如果我使用你在第二個 htaccess 中告訴我的東西,就像這樣
<IfModule mod_rewrite.c>
# Redirect HTTP to HTTPS and www to non-www
RewriteCond %{ENV:HTTPS} !on [NC,OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(website\.pe) [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>
那應該有效......但仍然沒有
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/322370.html
