apache/mod_rewrite 配置不正确?

apache/mod_rewrite 配置不正确?

大家好。我决定看一下新的 MVC PHP 框架FuelPHP我似乎在让 Apache 正确处理请求时遇到了一些问题(或者这是 PHP 配置问题?)。下面是正在使用的 .htaccess 文件。

<IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

我得到的错误是(访问的网址是http://localhost/~tyson/嘿

The requested URL /home/tyson/www/public/index.php/hey was not found on this server.

现在这个文件实际上并不存在,但是,应该被路由到包含的 FuelPHP 错误处理文件并在其他主机上开箱即用,所以我不得不假设这是我没有使用 Apache、Apache 模块或 PHP 配置的东西。

我应该指出的是完成了基本的重写以确保 mod_rewrite 可用,但需要注意的是,当我尝试通过重写使用自定义 404 页面时,它只会打印我尝试使用的文件的路径而不是执行它,但会正确地通过 http 重定向到外部页面。即:重定向到 Google 是可行的。

我现在坚信这是有关联的。~tyson/hey 无法正确响应,但 ~tyson/index.php/hey 可以。为什么 Apache 无法正确查找和执行重写中引用的这些本地文件?

如果您已经读到这里,感谢您的阅读!

编辑:为了进一步说明,他是我的 /etc/httpd/conf/httpd.conf 文件的相关部分

<IfModule mod_userdir.c>
    #
    # UserDir is disabled by default since it can confirm the presence
    # of a username on the system (depending on home directory
    # permissions).
    #
    UserDir enabled tyson

    #
    # To enable requests to /~user/ to serve the user's public_html
    # directory, remove the "UserDir disabled" line above, and uncomment
    # the following line instead:
    #
    UserDir www/public

</IfModule>

#
# Control access to UserDir directories.  The following is an example
# for a site where these directories are restricted to read-only.
#
<Directory /home/*/www/public>
    AllowOverride All
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNOEXEC
    <Limit GET POST OPTIONS>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>

答案1

您是否检查过 .htaccess 是否确实适用于该目录?您可能需要在 apache 配置中将该目录的 AllowOverride 设置为 All,而不是 None (默认)。

答案2

问题确实出在 .htaccess 配置上。通过更改:

RewriteRule ^(.*)$ index.php/$1 [L]

RewriteRule ^(.*)$ /~tyson/index.php/$1 [L]

现在一切都按预期进行。

相关内容