.htaccess url重写

时间:2012-05-06 22:20:37

标签: apache .htaccess mod-rewrite

我的userdir下有一个php / apache网站,比如http://localhost/~johnny5/

我有/en个文件夹,其中包含.htaccess个文件和index.php个文件:

/home/johnny5/public_html
                         /somefile.php
                         /someotherfile.php
                         /en/
                            .htacces
                            index.php

我在/en下启用了网址重写,因此所有请求都由index.php处理。这是.htacces的内容:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /~johnny5/en
RewriteRule . index.php

到此为止,一切正常。

当我点击http://localhost/~johnny5/en/foo/bar时,请求由/en/index.php处理。

现在,出于测试目的,我将网站移至/var/www下,以便我可以http://localhost/直接访问该网站。我调整.htaccess文件以删除用户文件夹:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /en
RewriteRule . index.php

我现在有这个结构:

/var/www
        /somefile.php
        /someotherfile.php
        /en/
            .htacces
            index.php

现在,如果我点击http://localhost/en/foo/bar,我希望请求由/en/index.php处理,但我得到的是/en/foo/bar找不到的404。

看起来重写模块在我的用户目录下工作,但不在“主”目录下。

我遗失了什么?

2 个答案:

答案 0 :(得分:1)

不确定服务器上的新结构,但请记住一个非常重要的标尺: .htaccess规则仅适用于CURRENT和CHILD(recursivly)目录,不适用于高于.htaccess目录的目录。

所以如果你的.htaccess现在在:

/home/johnny5/public_html/en/.htaccess

它无法使用路径

http://localhost/en/foo/bar

如果服务器上的http://localhost/ root是home /

尝试将您的htaccess移动到www服务器的根目录,然后重试

答案 1 :(得分:0)

所以这就是我的错误 - 错误配置。

我在错误的文件夹下“AllowedOverride”。