2012-03-30 50 views
0

用戶/ /網站目錄有可能是一個相當簡單的解決方案,但我一直在尋找了兩天,並不能找到一個,SOOOO ... mod_rewrite的在OSX

我在OS X機器上開發一個網站(Lion)。工作站點位於/ Users/username/Sites,我已將該目錄添加到/etc/apache2/users/username.conf。我可以查看沒有問題的頁面。

但是...我使用CodeIgniter,我想從URL中刪除index.php。這對mod_rewrite來說應該是一個相當簡單的工作。我已將.htaccess文件添加到目錄中(並在上面的conf文件中設置了AllowOverride All)。谷歌搜索後,我發現我需要選項+ FollowSymLinks設置(我在.htaccess文件中)。

這裏的問題是,它似乎從本地主機/〜用戶名/到/用戶/用戶名/站點重寫的URL。問題在於,在這種形式下,瀏覽器只是試圖下載index.php文件,而不是執行它。當鏈接是這會變得更糟,因爲/Users//Sites/index.php/controller/function不存在這些文件......笨是指接管在index.php,但只有當它被執行。

所以我不能移除Options + FollowSymLinks,因爲它會生成Access Forbidden錯誤,並且由於上述原因我不能保留它。

有趣的是,把一模一樣的網站/資源庫/ Web服務器/ Documents目錄工作正常。 OS X沒有出現在腦海中的FollowSymLinks到該目錄,可能是因爲它是在httpd.conf設置爲DocumentRoot的

我的httpd.conf是股票獅子,除了所有的AllowOverride上/庫/ Web服務器/文件。 mod_rewrite已啓用。

我username.conf是

<Directory "/Users/username/Sites/"> 
    Options Indexes MultiViews FollowSymLinks 
    AllowOverride All 
    Order allow,deny 
    Allow from all 
</Directory> 

我在網站的目錄的.htaccess文件

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond $1 !^(index\.php|static|robots\.txt) 
RewriteRule ^(.*)$ index.php/$1 [L] 

很顯然,我可以開發上/庫/ Web服務器/文檔,而是寧願做它在我的本地文件中。

回答

2

還有就是笨的網站約mod rewrite上一個優秀的wiki頁面,它涵蓋了所有的你需要對你的.htaccess文件和笨的變化文件本身。

人們很容易忘記在你的配置文件中更改數值,如index_page:

$config['index_page'] = "index.php"; 

$config['index_page'] = ""; 

的例子。該wiki頁面上顯示htaccess文件是(我已刪除評論):

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_URI} ^system.* 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

RewriteCond %{REQUEST_URI} ^application.* 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$1 [L] 

如果您發現您需要,只需添加將AddType和選項的屬性吧。

+1

RewriteBase就是答案。非常感謝你的幫助。爲了將來的參考,我使用了「RewriteBase /〜用戶名」。查看日誌,RewriteBase在應用重寫規則後重寫URL前綴,這正是我所需要的。 – mblackwell8 2012-04-01 05:54:31

1

這裏有些技巧可能有用

AddType application/x-httpd-php .php 

Options +FollowSymLinks 

RewriteEngine on 
RewriteBase /Users/username/Sites/ 

RewriteEngine on 
RewriteCond $1 !^(index\.php|static|robots\.txt) 
RewriteRule ^(.*)$ index.php/$1 [L] 

您也可以登錄改寫日誌。不過,建議你刪除這些行,您修復後的一切

RewriteLog "/var/log/httpd/rewrite_log" 
RewriteLogLevel 9 
+0

謝謝safarov。你還提到了RewriteBase,它證明了缺失的成分,所以已經投票贊成......但是因爲他是第一個而給了cchana答案。也感謝日誌,這被證明是有用的。 – mblackwell8 2012-04-01 05:56:25