2008-11-05 94 views
4

我正在編寫一個小型CMS來更好地理解它們的工作方式並學習一些關於PHP的新東西。但是我遇到了一個問題。mod_rewrite,php和.htaccess文件

我想使用mod_rewrite(儘管如果有人有更好的解決方案,我可以試試它)來生成漂亮乾淨的URL,因此site.com/index.php?page=2可以改爲site.com/。工具

據我的理解,我需要改變我的.htaccess文件,每次我添加一個新頁面,這是我遇到問題的地方,我的PHP一直告訴我,我無法更新它,因爲它沒有權限。快速chmod顯示,即使有777的權限,它不能這樣做,我錯過了什麼?

我的mod_rewrite指令的源代碼當前是this page here因爲它很重要/有用。

回答

10

一種方法是重寫一切的處理腳本

RewriteEngine on 
RewriteBase/

# only rewrite if the requested file doesn't exist 
RewriteCond %{REQUEST_FILENAME} !-s 

# pass the rest of the request into index.php to handle  
RewriteRule ^(.*)$ /index.php/$1 [L] 

,所以如果你有http://yourserver/foo/bar/

請求你真正得到的是向http://yourserver/index.php/foo/bar一個請求 - 你可以離開的index.php決定如何處理/ foo/bar(使用$ _SERVER ['PATH_INFO'] - tom

您只需要第一次修改.htaccess。所有未來的文件請求都可以在PHP中處理。

你也許會發現the docs for mod_rewrite有用 - 但保持簡單或準備失去大量的睡眠和頭髮追蹤模糊的錯誤。

+1

可能值得解釋的是,您可以從$ _SERVER ['PATH_INFO']之類的東西獲得'/ foo/bar' – 2008-11-05 22:29:55

2

你的PHP應該是非常明顯的原因,不能修改.htaccess。即使你得到這個工作,我不知道這是否明智。

如何使用關於mod_rewrite規則的更抽象的設置?根據您的需要定義您的一般網址格式。例如:

 
/object/action/id 

然後寫了一組重新路由HTTP請求到PHP頁面,這反過來又使決定哪些網頁是運行(比如,通過包括相關的PHP腳本)的規則。

 
RewriteRule ^/(\w+)/?(\w+)?/?(\d+)?$ /index.php?object=$1&action=$2&id=$3 [nocase] 

這樣你就不必更新.htaccess很多時候仍然是靈活的。