帶有“.c”擴展名和不帶“.c”擴展名的 apache 模組有什麼區別?

帶有“.c”擴展名和不帶“.c”擴展名的 apache 模組有什麼區別?

我在 Ubuntu 14.04 上運行 apache v2.4 並具有這種格式的容器/指令

<IfModule mpm_prefork_module>
        # ...
</IfModule>

然而,我經常看到 apache 官方文件和 stackexchange 網站中引用的模組是這樣的:

<IfModule prefork.c>
        # ...
</IfModule>

我搜尋了很多,包括這裡-http://httpd.apache.org/docs/2.4/mod/core.html#ifmodule我無法找到其中的區別以及何時應該使用其中一個而不是另一個?


以重寫模組為例

來自阿帕契文件:ifmodule 指令

模組參數可以是編譯時的模組標識符或模組的檔名。
例如,rewrite_module 是標識符,mod_rewrite.c 是檔名。

.htaccess在文件中很常見

<IfModule mod_rewrite.c>
    # ....
</IfModule>

grep已經編輯了我的/etc/apache2目錄,並且“mod_rewrite.c”沒有在任何地方定義。

在我的機器上,該文件/etc/apache2/mods-available/rewrite.load
包含:

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

那麼是mod_rewrite.c對 Windows/其他檔案的引用嗎?在什麼情況下在 Linux 機器上引用它會是不正確的語法?

答案1

在頁面中你連結的到,它包含以下文字:

模組參數可以是編譯時的模組標識符或模組的檔名。例如,rewrite_module 是標識符,mod_rewrite.c 是檔名。如果模組由多個原始檔案組成,請使用包含字串 STANDARD20_MODULE_STUFF 的檔案名稱。

使用提供的範例,重寫模組可以稱為“rewrite_module”(標識符)或 mod_rewrite.c(檔案名稱)。兩者是等價的,沒有差別。您可以使用其中任何一個。

帶有原始檔 mod_rewrite.c 的模組被編譯為 mod_rewrite.so,這就是您的檔案系統上的內容。該原始檔案具有行“module AP_MODULE_DECLARE_DATA rewrite_module;”其中宣告了一個名為「rewrite_module」的模組。

此模組可以稱為“rewrite_module”(即標識符)或“mod_rewrite.c”(即編譯該模組的原始檔)。

「LoadModule」行告訴它從已編譯的物件 mod_rewrite.so 載入具有標識符「rewrite_module」的模組。配置此選項時,您可以引用標識符或來源檔案名稱(如果您知道)。

答案2

正如 @DanielLawson 已經指出的那樣,這在您連結到的 Apache 手冊頁面中有清楚的描述。

模組參數可以是編譯時的模組標識符或模組的檔名。

模組的檔名以副檔名,因為 C 是 Apache httpd 開發所使用的語言。

模組標識符的概念又類似 Stack Exchange 的標籤。您的<IfModule mpm_prefork_module>區塊顯示:如果您有任何模組標記為mpm_prefork_模組。這使得配置具有更好的靈活性 - 不同的模組提供相同的功能,例如mod_ssl.cmod_gnutls.c都有ssl_模組標識符。

相關內容