1

我在我的 Windows 7 PC 上的 localhost 上托管了一个 PHP 网站,运行 XAMPP 1.8.2。

我有如下重写规则:

Options -Indexes +FollowSymLinks

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?rt=$1 [QSA,L]
</IfModule>

重写 URL,使其始终变为:http: //mysite.com/index.php?rt=[controller]/[action]/[params]

它可以完美运行,直到我在处理以下网址时发现它失败: http://mysite.com/error/xxx 。它返回 404 状态,而不是转到http://mysite.com/index.php?rt=error/xxx 。(我的网站根文件夹下没有子目录调用错误/)

我仔细检查了我的 PHP 代码,我确信这不是原因,我将我的网站上传到远程服务器,一切都很好。所以我很确定我的 XAMPP (Apache) 中没有正确配置某些东西,这使得 /error/xxx 请求被不同地处理。

我还发现访问 http://mysite.com/error/了我 403 但 http://mysite.com/[something_else]/很好

以防万一,我也将我的 vhost.conf 粘贴在这里:

<VirtualHost *:80>
    DocumentRoot "/xampp/htdocs"
    ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "E:\htdocs\mysite.dev"
    ServerName mysite.dev
</VirtualHost>

以及相关的httpd.conf:

<Directory "E:\htdocs">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
</Directory>

任何帮助表示赞赏!

4

2 回答 2

1

在浪费了一个小时后终于弄清楚了!

httpd-multilang-errordoc.conf下有个配置文件/xampp/apache/conf/extra,里面是这样的:

<IfModule alias_module>
<IfModule include_module>
<IfModule negotiation_module>
Alias /error/ "C:/xampp/apache/error/"

<Directory "C:/xampp/apache/error">
    AllowOverride None
    Options IncludesNoExec
    AddOutputFilter Includes html
    AddHandler type-map var
    Require all granted
    LanguagePriority en cs de es fr it ja ko nl pl pt-br ro sv tr
    ForceLanguagePriority Prefer Fallback
</Directory>

ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
ErrorDocument 410 /error/HTTP_GONE.html.var
ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var

</IfModule>
</IfModule>
</IfModule>

该行Alias /error/ "C:/xampp/apache/error/"处理所有请求匹配domainname.com/error/并将其重写为C:/xampp/apache/error/.

只需注释掉该行即可解决我的问题。不知道它做了什么,但把事情做好了。

于 2013-09-04T16:30:10.840 回答
0

从您上次的评论看来,Apache 甚至没有正确配置到您网站的路径!

您需要编辑该Xampp\apache\conf\httpd.conf文件。

首先制作它的备份副本。

编辑以...开头的行

DocumentRoot "

..如果它是一台 Windows 机器并且它使用 / 而不是 \ 保留那些。

然后您需要编辑以...开头的行

<Directory "

请注意,还有一个 CGI 版本。

如果您已正确编辑文件保存,然后重新启动 Apache。在您重新启动 Apache 之前,更改不会生效。

于 2013-09-03T16:50:57.860 回答