1

我正在设置我的新计算机,但我的一个网站似乎有一个奇怪的问题。任何以 /api 开头的 URL 都应重定向到文档根目录中的 api.php。下面的 .htaccess 文件在我的旧机器上工作,但在新机器上没有......

RewriteEngine On

RewriteRule ^api* /api.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.html [L]

访问 /api/v1/articles 时收到 404。我启用了 mod_rewrite,我可以直接浏览到 api.php 文件,如果我使用下面的 .htaccess 示例,它就可以工作

RewriteEngine On

RewriteRule ^wapi* /api.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.html [L]

所以似乎只有重定向 /api 的问题。这可能是什么原因造成的?!

(顺便说一句,在 Ubuntu 13.04 上运行 Apache)

4

2 回答 2

1

尝试在规则中添加斜线并确保Multiviews为 OFF

Options -Multiviews
RewriteRule ^api/ /api.php [L]

Multiviews是 mod_negotiation 的一部分,当它打开时(有时默认情况下),它将取代重写规则,因为它在 URL 处理管道中出现在 mod_rewrite 之前。如果它看到一个请求/api并看到有一个名为 的文件/api.php,它假定您的意思是/api.php而不是假目录/api/

于 2013-10-17T14:04:26.703 回答
0

试试这个规则:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteRule ^api(?!\.php).*$ /api.php [L,NC]
于 2013-10-17T14:02:34.247 回答