重写不起作用

重写不起作用

我想重写这个 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 之外。

相关内容