嵌套的.htaccess重写规则仅在某些服务器上有效

时间:2019-03-21 15:55:06

标签: apache .htaccess

我们有许多软件都运行在许多differnet服务器上,这些服务器无法访问apache配置。有时我们遇到以下问题:

我们的软件中有一个.htaccess文件,该文件定义了重写规则:

...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
...

将请求重写到当前目录中的index.php。

在某些系统上,这给我们带来了麻烦。到目前为止,我们发现的唯一解决方案是将规则更改为

RewriteRule . <path relative to webroot>/index.php [L]

我不明白为什么会有这个问题,我很想有一个在两个版本中都可以使用的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:0)

此行RewriteRule . <path relative to webroot>/index.php [L]

RewriteRule之后的第一部分是模式,在您的规则中为.

第二部分名为Substitution,在您的规则中为<path relative to webroot>/index.php

最后一部分是标志,它是规则中的[L]

摘自apache文档:

  

重写规则的替换是替换与Pattern匹配的原始URL路径的字符串。替代可以是:文件系统路径,URL路径   ,绝对URL或-(破折号)。

https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#rewriterule

因此,根据您的结构,您可以使用满足您需要的结构。