使用别名URI时会忽略.htaccess

时间:2011-12-04 16:09:33

标签: apache .htaccess mamp

我正在使用mod_rewrite将所有请求路由到index.php。

我的文件夹结构如下:

/Users/Peter/Projects/Framework
    /.htaccess
    /index.php

在我的.htaccess文件中,我有以下内容:

RewriteEngine on
RewriteCond $1 !^index\.php/
RewriteRule ^(.*)$ index.php/$1 [L]

当我访问projects.localhost/framework/example时,此功能正常。

我还设置了以下别名:     别名/〜别名/用户/彼得/项目

当我导航到http://projects.localhost/~alias/framework/example时,我的错误日志中出现404错误及以下内容:File does not exist: /Users/Peter/Projects/framework/example

当我使用别名URL时,似乎没有调用.htaccess文件(在使用别名URL时,在.htaccess文件中输入giberish不会触发任何类型的错误似乎证实了这一点。)

AllowOveride设置为All。

如何在使用别名URL时使.htaccess工作,并且无论URL(别名或别名)都重写规则是否一致?

编辑:导航到projects.localhost/~alias/framework/index.php/example也可以正常工作,确认别名工作正常(除了没有应用.htaccess规则)。

2 个答案:

答案 0 :(得分:11)

我发现你的问题有同样的问题。从@Gerbens评论我找到了Apache手册的this part,其中说明了:

#
#  /abc/def/.htaccess -- per-dir config file for directory /abc/def
#  Remember: /abc/def is the physical path of /xyz, i.e., the server
#            has a 'Alias /xyz /abc/def' directive e.g.
#

RewriteEngine On

#  let the server know that we were reached via /xyz and not
#  via the physical path prefix /abc/def
RewriteBase   /xyz

#  now the rewriting rules
RewriteRule   ^oldstuff\.html$  newstuff.html

为别名目录中的.htaccess文件添加重写基础解决了我的问题。

所以在你的情况下

RewriteEngine on
RewriteBase /~alias
RewriteCond $1 !^index\.php/
RewriteRule ^(.*)$ index.php/$1 [L]

答案 1 :(得分:0)

你确定你启用了mod_rewrite吗?