无法重写特定网址

时间:2013-10-17 13:59:47

标签: apache .htaccess

我正在设置我的新电脑,但我的某个网站似乎有一个奇怪的问题。任何以/ 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 btw上运行Apache)

2 个答案:

答案 0 :(得分:1)

尝试在规则中添加斜杠,确保Multiviews关闭

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

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

答案 1 :(得分:0)

尝试此规则:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteRule ^api(?!\.php).*$ /api.php [L,NC]