2012-03-23 63 views
0

我正在开发一个使用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。

+0

[This thread](https://github.com/Luracast/Restler/issues/36)在Luracast Restler Issues页面可能会引起一些注意。一探究竟! – Luracast 2012-03-26 03:26:52

+0

不幸的是,这些都无法解决问题。看起来好像将所有请求指向index.php的重写不正确地重写请求 - Apache仍然在寻找实际的文件路径。 – Kevin 2012-03-26 16:11:16

+0

已解决。显然,有人把下面一行放在httpd.conf中 - “AccessFileName htaccess.txt”....哇......对不起,这个愚蠢的问题。 – Kevin 2012-03-26 18:44:44

回答

0

此服务器上的htaccess文件被配置为文本文件。无论出于何种原因,这是一个简单的修复。