2011-09-01 57 views
1

我有一個關於mod_rewrite的問題。我知道在htaccess我可以做<IfModule>,但在PHP中呢?在html中,我寫出了我的鏈接,如projects/24,其確實是action=projects&id=24。如果有人安裝此應用程序的服務器沒有mod_rewrite,那麼如何在PHP中將鏈接更改爲GET變量?如果服務器沒有mod重寫

+0

不會添加mod_rewite是最簡單的解決方案嗎? – 2011-09-01 20:27:14

+2

爲什麼所有的downvotes? – animuson

+0

當然,添加mod_rewrite會更容易,但如果這是我想要銷售的應用程序,我希望用戶無需安裝。這只是一個倒退。當然,他們可以安裝mod_rewrite,但如果沒有安裝,我不希望我的應用程序被破壞 – Ronnie

回答

3

使用apache_get_modules()

編輯: 我不知道這差點否決了正確的答案,但他顯然不能RTM。

下面是一些代碼來說明:

<?php 

if (in_array("mod_rewrite", apache_get_modules())) { 
    echo 'has rewrite'; 
} else { 
    echo 'no rewrite'; 
} 

?> 

使用此來決定你想要寫哪種鏈接。

+0

這真的是我正在尋找的答案,謝謝 – Ronnie

+0

沒問題。此外,請記住檢查函數apache_get_modules是否存在,它們可能正在運行IIS或其他東西。 – regality

+0

是的,我想出了這一部分。我正在測試本地主機,你工作得很好。推送到我的服務器,並得到一個錯誤,說該函數不存在,所以我添加了'function_exists()'混合,一切都很好 – Ronnie

0

如何在PHP中將鏈接更改爲GET變量?

只是讓你所有的鏈接使用變量。
並根據一些配置設置來選擇它們的外觀,比如Wordpress。

+0

你的意思是重寫HTML輸出?或者你的意思是使用函數/宏生成鏈接並在那裏進行重寫? – NikiC

+0

耶基本上鍊接會根據服務器是否有mod_rewrite讀取不同,所以HTML輸出會不同 – Ronnie

0

有解決方法使用ErrorDocument和處理失敗的請求在userland(= PHP腳本)。但是這會(1)污染日誌,(2)不能與POST請求一起使用(取決於服務器)。不會因此而煩惱。

一個實用的選擇是將PATH_INFO用於乾淨的URL以及一個或多個根腳本。您需要使用它。 +MultiViewsSetHandlerDefaultTypeForceType(它可以用來種植一個php腳本sans擴展名)。 [1]
但通常情況下,這些也是禁止指令,如果甚至沒有啓用mod_rewrite。

[1]不要忘記一個FilesMatch節來限制效果,或者在子目錄中再次禁用它。