簡體   English   中英

如何將特定的 htaccess 轉換為全局 httpd.conf

[英]How to convert specific htaccess to global httpd.conf

我怎樣才能轉換

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

在全局 httpd.conf 配置中。 一個直接的問題是 httpd.conf 中不允許有 RewriteBase 規則。 但是要知道如何重寫它,可能有助於理解這些規則的作用。

RewriteBase / 做什么? 這是否意味着它將接受任何傳入的 URL 並刪除服務器名稱和 URL 中的最后一項之間的所有內容並將其刪除? http://example.com/dir1/dir2/file變成http://example.com/file 我認為第二條規則意味着像http://example.com/index.php這樣的 URL 保持不變。

第三行和第四行檢查請求的文件名是否作為文件或目錄存在,如果存在,則忽略以下重寫規則。

在最后一行中,重寫規則令人困惑,它似乎想要匹配任何單個字符並且只是單個字符(為什么不是 ^(.*)$),如果以某種方式匹配,則將整行重寫為/index.php which then seems to somehow know how to process the URL of http://example.com/index.php as it still contains what was originally submitted.

RewriteBase :你可以在 httpd.conf 中有 RewriteBase。 就在<Directory>塊下。 看文檔,有例子。

這是在目錄結構某處的 .htaccess 文件中。 它強制重寫引擎從/而不是從找到 .htaccess 文件的目錄開始。


第二行:如果它不是現有文件,您是正確的。


第三和第四行:如果它不是現有目錄,您是正確的。


最后一行:如果請求不是現有文件,也不是現有目錄,並且長度為 1 個字符 ==> 無論字符是什么(由.匹配),返回 index.php。

我同意你的看法,它應該是^(.*)$來匹配任何不是現有文件目錄的東西。 只有一個點是相當嚴格的,盡管在您的特定站點上可能有其背后的邏輯。


的詳細信息.

  • . : 匹配任何字符
  • .+ :匹配 1 個或多個。 所以任意數量的字符,不包括 0 個字符。
  • .* :匹配 0 個或更多。 所以任意數量的字符,包括 0 個字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM