我有以下重寫規則.htaccess:
# /m/yyy rule
RewriteRule ^m/([\w-] )/?$ accounts/$1/index.php [L,NC]
# /m/yyy/abc rule
RewriteRule ^m/([\w-] )/([\w-] )$ accounts/$1/$2.php [L,NC]
# /m/yyy/abc/ rule
RewriteRule ^m/([\w-] )/([\w-] )/$ accounts/$1/$2/index.php [L,NC]
我想執行 PHP 腳本 view.php 如果 URL 是https://example.com/m/mya/view.php,我希望accounts/mya/view.php被執行。
請告知我該怎么做。
uj5u.com熱心網友回復:
我假設您現有的規則被用于其他目的,因為它們都不會與所述 URL 匹配。
要在內部將請求重寫/m/mya/view.php為/accounts/mya/view.php(如前所述),那么您將在現有規則之前(或之后)添加以下內容:
RewriteRule ^m/(mya/view\.php)$ accounts/$1 [L]
為了使其更通用并將請求重寫/m/<file>為/accounts/<file>,但僅當/accounts/<file>存在時,您才可以在現有規則之前(或之后)執行以下操作:
RewriteCond %{DOCUMENT_ROOT}/accounts/$1 -f
RewriteRule ^m/([\w/-] \.\w{2,5})$ accounts/$1 [L]
更新:正則運算式部分\.\w{2,5}匹配檔案擴展名,看起來像什么。IE。一個點,后跟 2 到 5 個單詞字符。如果您只匹配.php檔案,則可以將其更改為對擴展名\.php進行硬編碼。.php使用正則運算式測驗工具regex101.com進行測驗并獲得正則運算式的詳細解釋(這不是 Apache 獨有的 - Apache 使用與 PHP 和其他語言相同的正則運算式引擎,即 PCRE)。
然后,前面的RewriteCond(條件)指令在實際重寫請求之前檢查此檔案是否存在于預期的目的地。沒有這個,無論目標檔案是否存在,請求都會被無條件地重寫。例如。/m/abc/xyz/does-not-exist.php將在內部重寫,然后稍后/accounts/abc/xyz/does-not-exist.php觸發 404 (可能會暴露子目錄 - 取決于您如何處理 404)。accounts
這些規則相對于您發布的現有規則的順序無關緊要,因為在請求檔案(檔案擴展名前包含一個點)時,正則運算式(RewriteRule 模式)不會發生沖突。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/498327.html
