Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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
Mod rewrite 什么';我的规则怎么了?_Mod Rewrite - Fatal编程技术网

Mod rewrite 什么';我的规则怎么了?

Mod rewrite 什么';我的规则怎么了?,mod-rewrite,Mod Rewrite,我的.htaccess文件当前看起来像这样 AddType x-mapp-php5 .php Options +FollowSymLinks Options +Indexes RewriteEngine On RewriteBase / RewriteRule ^account$ /account/orders.php [L] 当我转到http://mywebsite.com/account它在http://mywebsite.com/account/orders.php。但是当我把重写规则改

我的.htaccess文件当前看起来像这样

AddType x-mapp-php5 .php
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteRule ^account$ /account/orders.php [L]
当我转到
http://mywebsite.com/account
它在
http://mywebsite.com/account/orders.php
。但是当我把重写规则改为

RewriteRule ^account/orders$ /account/orders.php [L]
然后我转到
http://mywebsite.com/account/orders
,我发现错误404页面未找到。我做错了什么

******其他细节**

我终于诊断出了这个问题。但我不明白为什么我的解决方案有效。考虑帐户/Orth.PHP存在的场景。

以下规则不起作用

RewriteRule ^account/orders$ account/orders.php [L]
RewriteRule ^account/orders$ account/orders.php [L]
以下规则将起作用

RewriteRule ^account/order$ account/orders.php [L]
RewriteRule ^account/order$ account/orders.php [L]
即,如果模式的计算结果为现有文件,则重写规则将失败。因此,当模式与替换相同,但减去扩展时,重写规则将失败。如果我添加一个名为account/order.php的文件,那么这两个规则都将失败


为什么会发生这种情况?

奇怪的是,对我来说似乎没问题。。。 如果您有权访问Apache配置,请尝试为某些调试启用RewriteLog和RewriteLogLevel


还可以查看站点的日志文件(如果您有访问权限,请始终查看)

我不知道您的第一个示例将如何工作,因为我相信初始斜杠也会传递


重写规则^/account/orders$/account/orders.php[L]

您尝试过相对路径吗

RewriteRule ^account/orders$ account/orders.php [L]


编辑您还应确保已禁用。这导致Apache进行一些额外的模糊文件匹配以查找类似的命名文件,因此
/account/orders
将在传递给mod_rewrite之前映射到
/account/orders.php

我会首先尝试向我的规则添加重定向,以便在浏览器中查看服务器上发生了什么

RewriteRule ^account$ /account/orders.php [L,R]

还要确保没有其他规则(以前的规则)干扰,以防您没有在此处显示所有的.htaccess文件。

我在回答我自己的问题,因为我最终诊断出了问题。但我不明白为什么我的解决方案有效。考虑帐户/Orth.PHP存在的场景。

以下规则不起作用

RewriteRule ^account/orders$ account/orders.php [L]
RewriteRule ^account/orders$ account/orders.php [L]
以下规则将起作用

RewriteRule ^account/order$ account/orders.php [L]
RewriteRule ^account/order$ account/orders.php [L]
即,如果模式的计算结果为现有文件,则重写规则将失败。因此,当模式与替换相同,但减去扩展时,重写规则将失败。如果我添加一个名为account/order.php的文件,那么这两个规则都将失败


为什么会发生这种情况?

遗憾的是,我没有访问apache配置的权限。我的共享主机提供商说我无权访问apache服务器日志。还有其他“类型的日志”我可以检查吗?嗯,我不太确定这一个,但也许你可以强制一个php脚本作为默认的404页面,并进行打印(美元服务器);里面。在这种模式下,您可以看到到底调用了什么以及apache找不到它的原因。还是一样的问题是,这是我的整个.htaccess文件,itRewriteRule^account$/account/orders.php[L,R]上没有其他规则正确重定向,但RewriteRule^account/orders$account/orders.php[L,R]重定向到找不到的404页面