.htaccess mod_rewrite 在不同的站点上有不同的结果

Posted

技术标签:

【中文标题】.htaccess mod_rewrite 在不同的站点上有不同的结果【英文标题】:.htaccess mod_rewrite has different result on different sites 【发布时间】:2011-01-14 12:34:41 【问题描述】:

我正在使用 mod_rewrite 创建 SEO URL。基本上,事情的工作方式如下: 所有请求都被 .htaccess 捕获并重定向到一个 php 脚本(比如 transform.php)。 transform.php 解析 SEO URL 并将其转换为普通 URL,然后包含 index.php,然后捕获应用程序 (index.php's) 的输出并使用 RegEx 将所有普通 URL 转换为 SEO URL。 所以最重要的一步是让所有请求都通过transform.php。我的 .htaccess 相当长,但我设法将其限制为以下几行。

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine on

    RewriteRule ^index\.php?(.*)$ ./transform.php?p=$1&%QUERY_STRING [L]

</IfModule>

问题发生在初始(根)URL:http://mysite.com/。当我输入http://mysite.com/ 并且站点位于我的本地计算机上时,一切正常。 http://mysite.com/ 被 .htaccess 捕获并发送到 transform.php 进行进一步处理。但是在另一台服务器上,这条线不起作用(比如说http://mysite-other-server.com/)。此 .htaccess 行根本无法捕获请求。不过,http://mysite-other-server.com/index.php 一切正常。

此外,我在第二台服务器上有几个站点,其中一些可以正常工作,而另一些不能。就像其中一些 URL 首先解析为 http://mysite-other-server.com/index.php 然后由 .htaccess 处理,而对于另一些 URL 没有解析并且 .htaccess 处理 http://mysite-other-server.com/

我很困惑,并尝试在没有任何运气的情况下进行谷歌搜索。非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

我假设 Apache 配置为不接受 .htacces 文件。

您必须从 httpd 配置中使用 AllowOverride 设置启用它。

http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride

另一种可能是生产服务器没有加载 mod_rewrite,请检查 LoadModule 指令。

【讨论】:

您好,感谢您的回复!服务器肯定接受 .htaccess 文件,因为 mysite-other-server.com/index.php 按预期工作。 mod_rewrite 也是如此。但是由于某种原因mysite-other-server.com 不会产生相同的结果。它仍然进入 .htaccess 文件,但是 RewriteRule ^index\.php?(.*)$ .... 没有任何影响。在同一服务器上的其他站点上 RewriteRule ^index\.php?(.*)$ .... 适用于 mysite-other-server.com 所以整理一下:mysite-other-server.com 和 mysite-other-server123.com 在同一台服务器上。相同的 .htaccess 文件和 transform.php 用于两者。 mysite-other-server123.com 和 mysite-other-server123.com/index.php 都与该正则表达式匹配并进入 transform.php 但只有 mysite-other-server.com/index.php 匹配,而 mysite-other-server.com 不匹配。 请注意 AllowOverride 指令可以设置为特定的 VirtualHost,从而允许单个 Apache 有一个域工作而另一个没有。 感谢您的提示。 cPanel“virtualHost”模板由于某种原因发生了变化,所有新创建的站点都获得了不同的 virtualHost 条目。从新旧站点的差异来看,影响这个的配置是 UseCanonicalName Off 没有这个配置的站点有问题,而有这个配置的站点运行良好。总之非常感谢!您的提示非常重要,让我看到了正确的方向!

以上是关于.htaccess mod_rewrite 在不同的站点上有不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

子域 mod_rewrite (htaccess) 到相对目录

.htaccess 和 mod_rewrite 出错

将 .htaccess 转换为 nginx (mod_rewrite)

如果 .htaccess 使用 mod_rewrite,则 Apache httpd.conf mod_rewrite 取消

没有 mod_rewrite 的漂亮 URL,没有 .htaccess

ifModule mod_rewrite 标记在 .htaccess mod_rewrite 文件中是不是多余