.htaccess 重定向适用于 OSX 本地但不适用于 Windows XAMPP

.htaccess redirect works on OSX local but not Windows XAMPP

我创建了一个 .htaccess 文件来控制对 REST api 的访问,同时在 OSX 机器 运行 本地服务器上进行开发。但是,我也需要部署的实际主机是 windows 机器 运行 XAMPP。我使用相同的 .htaccess 文件并将其从开发服务器移至实时服务器,但它似乎不再正常运行了。

这是 .htaccess 文件的内容:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule api/v1/(.*)$ api/v1/api.php?request= [QSA,NC,L]
</IfModule>

.htaccess 文件位于与 api.php 文件相同的目录中,后者是一个目录。因此,当我访问从 OSX 机器托管的此页面时,它位于:

<IP Address>/RESTDevelopement/api.php

(本机实际文件夹路径为:.../Documents/RESTDevelopment/api.php)

当我转到 URL 时:<IP Address>/RESTDevelopement/api/v1/query/ 它通过将请求发送到 <IP Address>/RESTDevelopement/api.php?request=query/

来响应

这很好用,我已经使用了几个星期没有问题。

然而,windows 机器并非如此...

在我的 windows 机器上,我有 XAMPP 服务器 运行 并且我将我的项目存储在 htdocs 文件夹中。实际位置是:

G:\xampp\htdocs\RESTDevelopment\api.php

我访问它的方式与 OSX:

相同

<IP Address>/RESTDevelopement/api.php

但是,当我转到同一页面使用 api <IP Address>/RESTDevelopement/api/v1/query/ 时,出现内部服务器错误。

日志文件表明它处于重定向循环中。我尝试使用 来跟踪循环,但这对我来说没有多大意义:

[Tue Jan 05 11:41:15.925963 2016] [rewrite:trace3] [pid 6680:tid 1704] mod_rewrite.c(476): [client 10.1.10.70:54696] 10.1.10.70 - - [10.1.10.70/sid#604b00][rid#2c81030/initial] [perdir G:/xampp/htdocs/RESTDevelopment/] add path info postfix: G:/xampp/htdocs/RESTDevelopment/api -> G:/xampp/htdocs/RESTDevelopment/api/v1/query/
[Tue Jan 05 11:41:15.925963 2016] [rewrite:trace3] [pid 6680:tid 1704] mod_rewrite.c(476): [client 10.1.10.70:54696] 10.1.10.70 - - [10.1.10.70/sid#604b00][rid#2c81030/initial] [perdir G:/xampp/htdocs/RESTDevelopment/] strip per-dir prefix: G:/xampp/htdocs/RESTDevelopment/api/v1/query/ -> api/v1/query/
[Tue Jan 05 11:41:15.925963 2016] [rewrite:trace3] [pid 6680:tid 1704] mod_rewrite.c(476): [client 10.1.10.70:54696] 10.1.10.70 - - [10.1.10.70/sid#604b00][rid#2c81030/initial] [perdir G:/xampp/htdocs/RESTDevelopment/] applying pattern 'api/v1/(.*)$' to uri 'api/v1/query/'
[Tue Jan 05 11:41:15.925963 2016] [rewrite:trace2] [pid 6680:tid 1704] mod_rewrite.c(476): [client 10.1.10.70:54696] 10.1.10.70 - - [10.1.10.70/sid#604b00][rid#2c81030/initial] [perdir G:/xampp/htdocs/RESTDevelopment/] rewrite 'api/v1/query/' -> 'api/v1/api.php?request=query/'
[Tue Jan 05 11:41:15.925963 2016] [rewrite:trace3] [pid 6680:tid 1704] mod_rewrite.c(476): [client 10.1.10.70:54696] 10.1.10.70 - - [10.1.10.70/sid#604b00][rid#2c81030/initial] split uri=api/v1/api.php?request=query/ -> uri=api/v1/api.php, args=request=query/
[Tue Jan 05 11:41:15.925963 2016] [rewrite:trace3] [pid 6680:tid 1704] mod_rewrite.c(476): [client 10.1.10.70:54696] 10.1.10.70 - - [10.1.10.70/sid#604b00][rid#2c81030/initial] [perdir G:/xampp/htdocs/RESTDevelopment/] add per-dir prefix: api/v1/api.php -> G:/xampp/htdocs/RESTDevelopment/api/v1/api.php
[Tue Jan 05 11:41:15.925963 2016] [rewrite:trace2] [pid 6680:tid 1704] mod_rewrite.c(476): [client 10.1.10.70:54696] 10.1.10.70 - - [10.1.10.70/sid#604b00][rid#2c81030/initial] [perdir G:/xampp/htdocs/RESTDevelopment/] strip document_root prefix: G:/xampp/htdocs/RESTDevelopment/api/v1/api.php -> /RESTDevelopment/api/v1/api.php
[Tue Jan 05 11:41:15.925963 2016] [rewrite:trace1] [pid 6680:tid 1704] mod_rewrite.c(476): [client 10.1.10.70:54696] 10.1.10.70 - - [10.1.10.70/sid#604b00][rid#2c81030/initial] [perdir G:/xampp/htdocs/RESTDevelopment/] internal redirect with /RESTDevelopment/api/v1/api.php [INTERNAL REDIRECT]
[Tue Jan 05 11:41:15.926963 2016] [rewrite:trace3] [pid 6680:tid 1704] mod_rewrite.c(476): [client 10.1.10.70:54696] 10.1.10.70 - - [10.1.10.70/sid#604b00][rid#2c8b018/initial/redir#1] [perdir G:/xampp/htdocs/RESTDevelopment/] add path info postfix: G:/xampp/htdocs/RESTDevelopment/api -> G:/xampp/htdocs/RESTDevelopment/api/v1/api.php
[Tue Jan 05 11:41:15.926963 2016] [rewrite:trace3] [pid 6680:tid 1704] mod_rewrite.c(476): [client 10.1.10.70:54696] 10.1.10.70 - - [10.1.10.70/sid#604b00][rid#2c8b018/initial/redir#1] [perdir G:/xampp/htdocs/RESTDevelopment/] strip per-dir prefix: G:/xampp/htdocs/RESTDevelopment/api/v1/api.php -> api/v1/api.php
[Tue Jan 05 11:41:15.926963 2016] [rewrite:trace3] [pid 6680:tid 1704] mod_rewrite.c(476): [client 10.1.10.70:54696] 10.1.10.70 - - [10.1.10.70/sid#604b00][rid#2c8b018/initial/redir#1] [perdir G:/xampp/htdocs/RESTDevelopment/] applying pattern 'api/v1/(.*)$' to uri 'api/v1/api.php'
[Tue Jan 05 11:41:15.926963 2016] [rewrite:trace2] [pid 6680:tid 1704] mod_rewrite.c(476): [client 10.1.10.70:54696] 10.1.10.70 - - [10.1.10.70/sid#604b00][rid#2c8b018/initial/redir#1] [perdir G:/xampp/htdocs/RESTDevelopment/] rewrite 'api/v1/api.php' -> 'api/v1/api.php?request=api.php'
[Tue Jan 05 11:41:15.926963 2016] [rewrite:trace3] [pid 6680:tid 1704] mod_rewrite.c(476): [client 10.1.10.70:54696] 10.1.10.70 - - [10.1.10.70/sid#604b00][rid#2c8b018/initial/redir#1] split uri=api/v1/api.php?request=api.php -> uri=api/v1/api.php, args=request=api.php&request=query/

最后 5 行在给出重定向错误之前在日志中重复了几次。

我尝试过的事情:

  1. 我通过一个非常简单的测试确保正在读取 htaccess 文件
  2. 我通过非常简单的测试确保 mod_rewrite 模块正常工作
  3. 我尝试将 RewriteBase 设置为各种 directories/folders 以确定它是否被重定向错误......我对此了解不多,所以我正在盲目射击它没用。
  4. 我在 google 上搜索了很长一段时间,想看看是否还有其他人对 XAMPP 有这个问题,但每个人似乎都在使用一致的模式。

注意:我确实为此目录设置了 AllowOverride All

感谢您的帮助!

如果 api/v1/ 不是真实路径,则使用此规则:

Options -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^api/v1/(.*)$ api.php?request= [QSA,NC,L]