我正在開發一個使用Luracast Restler庫的API。我所需要的是讓index.php從我的URL中「隱藏」,以便保持在RESTful API標準之內。注意!:是的,我啓用了mod_rewrite,是的,我在目錄中有.htaccess文件。我在我的機器上完成這項工作絕對沒有問題,但是當將它移動到生產環境進行一些基本測試時,.htaccess文件似乎行事不同,因爲URL中需要再次使用index.php!Luracast Restler .htaccess不能用mod_rewrite啓用重寫請求
我的開發機器和我的生產機器都在運行窗口。兩者都使用多個虛擬主機。兩者都啓用了mod_rewrite。
我的.htaccess文件是從字面上所提供的例子:
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
<IfModule mod_php5.c>
php_flag display_errors Off
</IfModule>
我們在httpd.conf中具有相同的目錄設置:
<directory "C:\www">
Options FollowSymLinks -Includes -ExecCGI -Indexes -SymLinksIfOwnerMatch
order allow,deny
Allow from all
AllowOverride All
</directory>
而我的開發機器上這種配置的偉大工程。當我將它移動到生產環境時,它需要在URL中使用index.php,以便將請求提供給我的index.php文件。如果我從URL中刪除index.php,我從Apache獲得一個404(不是Restler響應)。我在Apache日誌也出現此錯誤:
File does not exist: C:/www/api_website_com/public/classname/function
這是我的理解是,這的.htaccess應直接重寫我的HTTP請求的index.php,而不是尋找URL就好像它是一個文件。有人有想法嗎?它必須是我忽略的簡單東西。
另請注意,我無法啓用RewriteLog,因爲我無法訪問生產服務器的httpd.conf。
[This thread](https://github.com/Luracast/Restler/issues/36)在Luracast Restler Issues頁面可能會引起一些注意。一探究竟! – Luracast 2012-03-26 03:26:52
不幸的是,這些都無法解決問題。看起來好像將所有請求指向index.php的重寫不正確地重寫請求 - Apache仍然在尋找實際的文件路徑。 – Kevin 2012-03-26 16:11:16
已解決。顯然,有人把下面一行放在httpd.conf中 - 「AccessFileName htaccess.txt」....哇......對不起,這個愚蠢的問題。 – Kevin 2012-03-26 18:44:44