mod_rewrite 在 Linux 中有效,但在 Windows 中无效

Posted

技术标签:

【中文标题】mod_rewrite 在 Linux 中有效,但在 Windows 中无效【英文标题】:mod_rewrite works in Linux but not in Windows 【发布时间】:2014-10-23 02:40:46 【问题描述】:

大家都知道 Apache 和 mod_rewrite 的黑魔法……

我也有问题……

我刚刚从这里 https://www.apachelounge.com/download/win64/ 下载了 Apache 2.4 并使用这一行启用了 mod_rewrite

LoadModule rewrite_module modules/mod_rewrite.so

httpd.exe -v 的输出

Server version: Apache/2.4.10 (Win64) Apache Lounge VC10 Server built: Jul 19 2014 12:25:58

我的 httpd.conf http://pastebin.com/TDHpurBi

还有我的 .htaccess http://pastebin.com/f6KV3Zd2

.htaccess 用于我的 MVC 框架

提前感谢您的帮助

PS:.htaccess 与

一起工作就像一个魅力

Server version: Apache/2.4.7 (Win32) Apache Lounge VC10 Server built: Nov 26 2013 15:46:56

来自 Uniserver

PS2:我忘了说,我在 Linux 下运行了 .htaccess,并在 httpd.conf 中启用了 AllowOverride。所以它可能只是一个 Apache-Windows 问题。

【问题讨论】:

我想服务器配置会有所不同。点发布很少(也不应该)破坏功能。 我忘了说,我让 .htaccess 在 Linux 下运行。 :// 确保使用相关信息/详细信息更新问题。 我敢打赌这是因为 ServerRootDocumentRootDirectory 指令的相对路径。尝试使用绝对路径,这应该适用于两个操作系统 【参考方案1】:

你必须考虑 .htaccess 的别名和位置

因此,例如,如果您创建了一个名为“mywebsite”的别名(因此您将打开 http://localhost/mywebsite 以访问主页)但您在子文件夹中拥有 .htaccess,例如 /api 文件夹,您需要使用这个 RewriteBase 指令:

RewriteBase /mywebsite/api

然后重启apache

【讨论】:

【参考方案2】:

我解决了这个问题!

DocumentRoot "$SRVROOT/htdocs"
<Directory "$SRVROOT/htdocs">

部分!

还有设置

AllowOverride All

这会解决你的问题!

【讨论】:

你能解释一下它是如何工作的吗?

以上是关于mod_rewrite 在 Linux 中有效,但在 Windows 中无效的主要内容,如果未能解决你的问题,请参考以下文章

mod_rewrite 已安装但无法正常工作

mod_rewrite 适用于 .htaccess 文件,但不适用于 apache2.conf

在 mod_rewrite 规则中转换为小写

如何在 ubuntu 上的 LAMP 中启用 mod_rewrite? [关闭]

Apache mod_rewrite 适用于 .htaccess 但不适用于 httpd.conf

mod_rewrite:重写规则还是重定向?