【问题标题】:.htaccess redirect works on OSX local but not Windows XAMPP.htaccess 重定向适用于 OSX 本地但不适用于 Windows XAMPP
【发布时间】:2016-04-09 14:09:35
【问题描述】:

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

这是 .htaccess 文件的内容:

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

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

&lt;IP Address&gt;/RESTDevelopement/api.php

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

当我转到 URL:&lt;IP Address&gt;/RESTDevelopement/api/v1/query/ 时,它会通过将请求发送到 &lt;IP Address&gt;/RESTDevelopement/api.php?request=query/ 来响应

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

但是,windows 机器却不是这样......

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

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

我使用与 OSX 相同的方式访问它:

&lt;IP Address&gt;/RESTDevelopement/api.php

但是,当我转到同一页面使用 api &lt;IP Address&gt;/RESTDevelopement/api/v1/query/时,它给了我一个内部服务器错误。

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

[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 设置为各种目录/文件夹,以确定它是否被错误地重定向...我对此了解不多,所以我盲目射击,但没有成功。
  4. 我在 google 上搜索了很长一段时间,看看是否有其他人在使用 XAMPP 时遇到此问题,但似乎每个人都在使用一致的模式。

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

感谢您的帮助!

【问题讨论】:

    标签: php apache .htaccess mod-rewrite xampp


    【解决方案1】:

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

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

    【讨论】:

    • 哇,你是对的......现在为什么这在 OSX 网站上有效,而不是在 XAMPP 网站上?这很奇怪....
    • 不确定但可能是这个选项 MultiViews 在那里启用
    猜你喜欢
    • 2014-08-11
    • 2014-08-19
    • 2020-01-04
    • 2017-08-20
    • 1970-01-01
    • 2010-12-08
    • 2019-07-27
    • 1970-01-01
    • 2020-01-07
    相关资源
    最近更新 更多