重写拒绝工作

我想重写这个url:

http://cyanogenupdatetracker.com/api/v1/show_devices.php

到http://cyanogenupdatetracker.com/api/v1/devices

我用这个.htaccess文件

Options +FollowSymlinks RewriteEngine on RewriteRule ^devices$ devices/ RewriteRule ^devices/$ /var/www/api/v1/show_devices.php 

它总是返回一个404错误,即使我知道,并且100%确定PHP文件存在于给定的位置。 我尝试了一切(PHP文件,自定义虚拟主机,重写基地之前没有path),但没有任何工作。

这个目录的apacheconfiguration如下:

 Alias /api /var/www/api <Directory /var/www/api> Options FollowSymLinks DirectoryIndex index.php AllowOverride All </Directory> 

我完全完成了这一点。 这似乎很简单(只有几个PHP文件),为什么它很难,只是为了简化url,使他们更好。

我究竟做错了什么?????

我认为你的问题是,在一个.htaccess文件的上下文中是隐含的。

实际上,这意味着您的RewriteRule不会映射到文件系统位置,而是映射到URIpath。 除此之外,还需要与Alias指令一起使用。 另外检查这个比较 。

cyanogenupdatetracker.com/api/v1/devices可能已被redirect到cyanogenupdatetracker.com/api/v1/var/www/api/v1/show_devices.php 。 你的规则应该看起来像:

 RewriteRule ^devices/$ show_devices.php 

其次,我的宠物狗,为什么你显然使用.htaccess文件,当你明显有权访问主要的Apacheconfiguration文件? 引自.htaccess文件中的手册 :

如果您有权访问httpd主服务器configuration文件, 应该完全避免使用.htaccess文件。 使用.htaccess文件会降低您的Apache HTTP服务器速度 。 您可以在.htaccess文件中包含的任何指令在主要的Apacheconfiguration文件中设置得更好,因为它具有相同的效果,性能更好。

同样,在主服务器configuration中,mod_rewrite指令在许多方面工作得更好。

通过将/ var / www / html中的documentroot更改为/ var / www,将api文件夹更改为/ var / www / html之外,从而修复了我自己。