我的 .htaccess 目前使用以下重寫規則具有以下行為:
https://example.com/abcd?lol=true
- 如果檔案
/abcd.php存在,打開https://example.com/abcd.php?lol=true - 如果目錄和檔案
/abcd/index.php存在,打開https://example.com/abcd/index.php?lol=true - 否則打開
https://example.com/index.php?lol=true
-> 在所有三種情況下,地址欄仍必須顯示https://example.com/abcd?lol=true
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [R=301,QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [END]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ / [END]
現在我的問題:我有一個新目錄/blog/,必須發生以下情況:
https://example.com/blog/abcd?lol=true
- 打開
https://example.com/blog/index.php?lol=true
->地址欄必須仍然顯示https://example.com/blog/abcd?lol=true,以便我可以使用 php 閱讀該abcd部分,這可能是文章名稱。
如何附加我的 .htaccess 代碼來實作這一點?
uj5u.com熱心網友回復:
旁白:您實際上并沒有為#2(即“如果目錄和檔案/abcd/index.php存在......”)做任何事情 - 您可能依賴于 mod_dir 的默認行為。但是,如果您請求/abcd?lol=true并/abcd作為物理目錄存在,則會有一個 301 外部重定向來附加尾部斜杠(即。 /abcd/?lol=true),這將導致/abcd/index.php被提供。因此,這并沒有按照/abcd?lol=true您的建議嚴格顯示在地址欄中。這就是你所看到的嗎?
要實作/blog/abcd?lol=true重寫,/blog/index.php?lol=true然后將您的最后一條規則替換為以下內容:
# Prevent further processing if a file or directory is requested directly
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [END]
# Route requests to blog/index.php
RewriteRule ^blog/. blog/index.php [END]
# Everthing else is routed to "/index.php"
RewriteRule . index.php [END]
這將檔案系統檢查分離到它們自己的規則中,因此您不會這樣做兩次。
您之前的“最后”規則:
RewriteRule ^(.*)$ / [END]
您只是重寫/然后依賴 mod_dir 為index.php(the DirectoryIndex) 發出內部子請求。您應該index.php根據需要直接重寫(不需要斜杠前綴)。^(.*)$這里不需要捕獲模式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/425152.html
