我正在使用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规则)。
答案 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吗?