Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php .htaccess mod_rewrite在不同的站点上有不同的结果_Php_.htaccess_Mod Rewrite_Indexing_Server Configuration - Fatal编程技术网

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

Php .htaccess mod_rewrite在不同的站点上有不同的结果,php,.htaccess,mod-rewrite,indexing,server-configuration,Php,.htaccess,Mod Rewrite,Indexing,Server Configuration,我正在使用mod_rewrite创建SEO URL。基本上,它的工作方式如下: 所有请求都被.htaccess捕获并重定向到一个php脚本(比如transform.php)。transform.php解析SEO URL并将其转换为普通URL,然后包含index.php,然后捕获应用程序(index.php)的输出,并使用正则表达式将所有普通URL转换为SEO URL。 因此,关键的一步是让所有请求都通过transform.php。我的.htaccess相当长,但我设法将其限制在以下几行 <

我正在使用mod_rewrite创建SEO URL。基本上,它的工作方式如下: 所有请求都被.htaccess捕获并重定向到一个php脚本(比如transform.php)。transform.php解析SEO URL并将其转换为普通URL,然后包含index.php,然后捕获应用程序(index.php)的输出,并使用正则表达式将所有普通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>

选项+FollowSymLinks
重新启动发动机
重写规则^index\.php?(.*)//transform.php?p=$1&%{QUERY\u STRING}[L]
初始(根)URL出现问题:。当我的类型和网站位于我的本地公司,一切正常。被.htaccess捕获并发送到transform.php进行进一步处理。但是,在另一台服务器上,这一行不起作用(比如说for)。这个.htaccess行根本无法捕获请求。不过一切都很好

此外,我在第二台服务器上有几个站点,其中一些可以工作,而另一些则不能。这就像对其中一些人来说,URL首先解析为,然后由.htaccess处理,而对其他人来说,URL没有解析,而.htaccess处理


我很困惑,并试图谷歌没有任何运气。非常感谢您的帮助。

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

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


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

您好,谢谢您的回复!服务器肯定会接受.htaccess文件,因为它可以按预期工作。mod_重写也是如此。然而,由于某些原因,这并不产生相同的结果。它仍然会进入.htaccess文件,但是重写规则^index\.php?(.*)$。。。。没有任何影响。而在同一服务器上的其他站点上,重写规则^index\.php?(.*)$。。。。这样可以很好地解决问题:并且在同一台服务器上。这两个文件使用相同的.htaccess文件和transform.php。和都由该regexp匹配并进入transform.php,但只有在不匹配时才匹配。请注意,AllowOverride指令可以设置为特定的VirtualHost,允许单个Apache有一个域工作,而另一个域不工作。感谢提示。cPanel“virtualHost”模板由于某种原因发生了更改,所有新创建的站点都获得了不同的virtualHost条目。从新旧站点之间的差异来看,影响此配置的配置是UseCononicalName。没有此配置的站点存在此问题,而具有此配置的站点功能良好。无论如何,非常感谢!你的建议非常重要,让我看到了正确的方向!