在某些情况下,在Windows 7中使用XAMPP时,Url重写不起作用

时间:2013-08-31 06:42:25

标签: apache mod-rewrite url-rewriting rewrite

我在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>

要重写网址,以便它总是会出现如下内容:http:// mysite.com/index.php?rt= [controller] / [action] / [params]

直到我发现处理网址时失败,直到我发现它为止:http:// mysite.com/error/xxx 。除了转到http:// mysite.com/index.php?rt=error/xxx 之外,它还会返回404状态。 (我的网站根文件夹下没有子目录调用错误)

我仔细检查了我的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>

感谢任何帮助!

2 个答案:

答案 0 :(得分: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/

简单地评论这条线就解决了我的问题。不知道它做了什么,但做完了。

答案 1 :(得分:0)

从您的上一条评论中可以看出,Apache甚至没有正确配置到您网站的路径中!

您需要修改Xampp\apache\conf\httpd.conf文件。

首先制作它的BACKUP副本。

编辑以...开头的行

DocumentRoot "

..如果它是Windows机器,它使用/而不是\保留那些。

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

<Directory "

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

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