我正在嘗試找到將根更改為默認子目錄_1的解決方案,但是當其中沒有檔案/目錄時subdirectory_1
,將所有請求重定向到root
目錄。
檔案夾
.
├── /subdirectory_1
│ ├── index.html
│ ├── about.html
│ └── ...
├── index.php
└── ...
對我來說,主要目標是在 中擁有靜態生成的網站subdirectory_1
,但也擁有 CMS(如 Wordpress)root
(作為某些帖子的管理員,稍后與 API 一起使用)。
我正在尋找的示例:
如果我呼叫mysite.com/about
它打開檔案/subdirectory_1/about.html
并在 URL 中顯示mysite.com/about
(沒有subdirectory_1
)。
但是如果我打電話mysite.com/contacts
并且其中沒有contacts
檔案(或目錄)/subdirectory_1
應該嘗試/contacts
在root
目錄中打開
到目前為止,我在 .htaccess 檔案中發現并嘗試過的是:
RewriteEngine On
# HTTP redirect to HTTPS
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ mysite.com/$1 [R,L,NC]
# ROOT Transfer to subdirectory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/subdirectory_1 [NC]
RewriteRule ^(.*)$ /subdirectory_1/$1 [L]
# Redirects index (/) to subdirectory index first
RewriteRule ^(/)?$ subdirectory_1/index.html [L]
# Wordpress config
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
它幾乎可以正常作業,但是有時會出現一些奇怪的行為,當我訪問某個檔案時,它會顯示帶有subdirectory_1
. 例如,我打電話mysite.com/about
,它會打開mysite.com/subdirectory_1/about
,如果我立即再次嘗試,mysite.com/about
它會正常打開mysite.com/about
。
不知何故,它不一致:/
也許有更好、更清潔、更可靠的解決方案?或者我只是在.htaccess 的某個地方犯了一個錯誤?
uj5u.com熱心網友回復:
在一位程式員的 Discord 中討論后,我終于找到了一個可行的解決方案。所以我決定和大家分享。
我的新 .htaccess 檔案:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ mysite.com/$1 [R,L,NC]
# Exceptions
# For all Wordpress Admin related links
RewriteCond %{REQUEST_URI} ^/(wp-admin|wp-login)/ [NC]
RewriteRule ^ - [L]
# ensure that all directory requests include a trailing slash
RewriteCond %{REQUEST_URI} / [^\.] $
RewriteRule ^(. [^/])$ %{REQUEST_URI}/ [R,L]
# Make /subdirectory_1 like it was root
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} /subdirectory_1/([^\s] ) [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_URI} !^/subdirectory_1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /subdirectory_1/$1 [NC,L,QSA]
# Wordpress config
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
現在靜態生成的網站 (in subdirectory_1
) 可以正常作業,我仍然可以訪問 WordPress。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/470873.html
上一篇:從斜線詞后重定向到查詢
下一篇:從直接下載URL下載檔案