大家好。我决定看一下新的 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]
现在一切都按预期进行。