![什麼 htaccess 規則將從 URI(如果包含 404)和內部連結中刪除為網站提供服務的子目錄?](https://rvso.com/image/1558054/%E4%BB%80%E9%BA%BC%20htaccess%20%E8%A6%8F%E5%89%87%E5%B0%87%E5%BE%9E%20URI%EF%BC%88%E5%A6%82%E6%9E%9C%E5%8C%85%E5%90%AB%20404%EF%BC%89%E5%92%8C%E5%85%A7%E9%83%A8%E9%80%A3%E7%B5%90%E4%B8%AD%E5%88%AA%E9%99%A4%E7%82%BA%E7%B6%B2%E7%AB%99%E6%8F%90%E4%BE%9B%E6%9C%8D%E5%8B%99%E7%9A%84%E5%AD%90%E7%9B%AE%E9%8C%84%EF%BC%9F.png)
**請參閱下面的更新*****
我的主網域網站將從我的伺服器上的一個子目錄提供服務,該子目錄的名稱與網域相同,因此在我的 webroot .htaccess 的這個混亂區塊中閱讀時可能會感到困惑:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
# remove www
RewriteCond %{HTTP_HOST} ^www\.(.+)$
RewriteRule ^.*$ %1 [NC,QSA,R=301]
#RewriteCond %{ENV:REDIRECT_STATUS} . [OR]
RewriteCond %{HTTP_HOST} ^(www\.)?my\-web\.agency$
RewriteRule ^my-web.agency/ - [L,R=404]
RewriteRule !^my-web.agency/ my-web.agency/%{REQUEST_URI} [NC,QSA]
</IfModule>
我已經為此工作了很長時間,改變了規則並建立了我目前要做的事情。
的www。留下來,所以刪除它的那一點是完全無效的。
!^my-web.agency/ 規則確實有效地為網站服務。然而,如果子目錄包含在 URI 中,我接下來嘗試渲染 404 會失敗。
請向我解釋如何解決所有這些問題。我正在嘗試閱讀文件、學習並找出答案,但不知怎的,我只是做不到,而且我已經投入了大量時間,我真的需要停下來,請幫助,我將非常感激學習並仔細記錄。非常感謝。
*****更新:** 現在我有
# remove www, externally for consistent domains (successful)
RewriteCond %{HTTP_HOST} ^www\.(.+)$
RewriteRule .* http://[[percent]]1/$0 [NS,L,R=301,QSA]
RewriteCond %{HTTP_HOST} ^(www\.)?my\-web\.agency$
RewriteCond %{REQUEST_URI} ^my-web.agency
RewriteRule ^(.*)$ - [R=404,L,NC]
RewriteCond %{HTTP_HOST} ^(www\.)?my\-web\.agency$
RewriteCond %{REQUEST_URI} !^my-web.agency
RewriteRule ^(.*)$ /my-web.agency/$1 [L,NC,QSA]
這確實有效地使 www.如果嘗試就會消失。但所有內部連結仍然包括應該隱藏的子目錄(例如,內部連結讀取“http://my-web.agency/my-web.agency/somepage"),並且使用 URI 中的子目錄存取頁面仍然有效;我寧願它返回 404。
DocumentRoot 或 RewriteBase 似乎是合乎邏輯的可能解決方案,只要我能找出正確的實作即可。 ([[percent]]
第一個 RewriteRule 中的 http:// 是允許它通過編輯器而不拋出錯誤;只是指示%
。)