重写在OSX中工作,而不是在Ubuntu上工作

时间:2013-11-20 23:20:03

标签: apache .htaccess ubuntu

我有一个重写规则在OSX(MAMP堆栈)上按预期工作,但在Ubuntu上有效。重写规则如下:

DirectoryIndex index.php
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /api
    RewriteRule ^$ index.php [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
<IfModule mod_php5.c>
    php_flag display_errors On
</IfModule>

目标是让像http://server.com/api/foobar这样的URL将foobar作为变量传递给index.php脚本。 Apache的版本有所不同:

  • OSX使用Apache / 2.2.23
  • Ubuntu使用Apache / 2.6.14

我知道这会在httpd.conf中强加一些温和的语法更改,但这就是我在Ubuntu中所拥有的:

AccessFileName .htaccess
Alias /api "/home/ubuntu/repos/api"
<Directory "/home/ubuntu/repos/api">
    DirectoryIndex index.php
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

当我在浏览器中输入http://server.com/api/index.php/resources时,我得到了正确的回复,但当我尝试使用重定向并输入http://server.com/api/resources时,它只响应403:Forbidden(还有服务器) error_log没有错误输入)。

我还注意到,使用http://server.com/api/.htaccess直接访问.htaccess文件会在error_log中触发错误:

  

[authz_core:error] [pid 10351:tid 139991464257280] [client x.y.z.w:60300] AH01630:服务器配置拒绝客户端:/home/ubuntu/repos/api/.htaccess

     

UPDATE :现在解释了这个最后一个错误...有一个指令阻止用户查看他.htaccess文件...这是合适的。我确实暂时将其关闭,看它是否有所帮助,但事实并非如此。

我检查了文件系统上的文件持久性,一切看起来都很好。必须是一个apache配置问题,但我拉着我的头发试图搞清楚。

-----更新------

目录权限: directory

文件权限: file

1 个答案:

答案 0 :(得分:0)

Occam's razor表示最好的答案不可避免地是最简单的答案。啊,昨天,当我把头靠在墙上时,这种智慧在哪里。无论如何,我已经解决了我的问题,我会在这里发布它作为一个简单的清单项目来寻找,如果你遇到像我这样的问题......

对我来说,Ubuntu上的Apache服务器超过了2.4阈值,这确实改变了一些指令语法。对于从2.4之前到2.4之后的任何人,请确保将对Order all,deny的引用更改为Required all granted。这是一个很好的步骤,但我遇到的问题是多余的。

添加到您的清单

现在真正的问题...如果重写不起作用且没有产生错误,请检查httpd.conf文件(或者您的主要Apache conf文件是什么)并验证重写的LoadModule是否已取消注释:

LoadModule rewrite_module modules/mod_rewrite.so

太傻了,但确实耗费了我几个小时。希望它不会对你做同样的事。