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