我想重写这个 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 文件前无路径、自定义 vhost、rewritebase),但这些都不起作用。
该目录的 apache 配置如下:
Alias /api /var/www/api
<Directory /var/www/api>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
</Directory>
我完全完成了。它看起来很简单(只有几个 php 文件),为什么这么难,只是为了简化 URL 以使其更美观。
我究竟做错了什么?????
答案1
.htaccess
我认为你的问题是在文件上下文中通过是隐含的。
实际上,这意味着您的 RewriteRule 不会映射到文件系统位置,而是映射到 URI 路径。除其他外,这是与 Alias 指令配合使用所必需的。另请查看这个比较。
cyanogenupdatetracker.com/api/v1/devices
可能最终被重定向到类似 的内容cyanogenupdatetracker.com/api/v1/var/www/api/v1/show_devices.php
。您的规则应如下所示:
RewriteRule ^devices/$ show_devices.php
其次,我最讨厌的是,.htaccess
既然你显然可以访问主 Apache 配置文件,为什么还要使用文件呢?引自.htaccess 手册文件:
你应该完全避免使用
.htaccess
文件 如果你有权访问 httpd 主服务器配置文件。使用.htaccess
文件会减慢你的 Apache http 服务器速度。任何可以包含在.htaccess
文件中的指令最好在主 Apache 配置文件中设置,因为它将具有相同的效果且性能更佳。...
同样
,mod_rewrite 指令在主服务器配置中在许多方面都运行得更好。
答案2
通过将 documentroot 从 /var/www/html 更改为 /var/www 来修复自己,因为 api 文件夹位于 /var/www/html 之外。