0

我正在开发一个 Concrete5 网站:

  • Concrete5 是一个开源的 PHP CMS
  • 它托管在我的 VPS 上(Debian 6、Apache 2.2.16 和 PHP 5.4)
  • 这是开发网址:http ://www.test.mijn-teamuitje.nl/
  • 它使用 Concrete5 生成的默认 .htaccess

我的问题与 .htaccess 规则有关,并且与此有关:mod_rewrite 'add path info postfix:'

这个问题会导致任何带有 index.php 和斜杠的 url 在我身上都变成 404。所以这行得通:http ://www.test.mijn-teamuitje.nl/teams 但这不是:http ://www.test.mijn-teamuitje.nl/index.php/teams

然而,我设法用一行来解决这个问题:RewriteRule ^index.php/(.*)$ index.php [L,DPI] in the .htaccess 所以现在它可以工作并且没有 404。

不幸的是,有一个缺点,这就是问题所在:任何映射到 Concrete5“工具”路径的 url 都需要大约 15 秒才能加载,我就是不知道为什么。这些工具 url 加载服务器输出的动态资源,如 html 或 javascript。一个例子是这个:http ://www.test.mijn-teamuitje.nl/index.php/tools/required/alert.php 。当您打开页面时,这些 url 会在后台使用脚本或链接元素调用。页面立即加载,但资源需要永远。

我知道这很复杂,但如果有人知道,只要看看我的重写规则,为什么这可能是一个问题,那么我很想听听。

这些是我的 .htaccess 重写规则:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php\/(.*)$ index.php [L,DPI]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php
</IfModule>

这是 Concrete5 的默认 htaccess,通常总是有效的。包含 DPI 标志的行是我添加的行。

从 mod_rewrite 日志来看,没有进行递归重定向。这些是 url http://www.test.mijn-teamuitje.nl/index.php/tools/required/alert.php的行

83.84.100.81 - - [16/Jul/2014:16:49:04 +0200] [www.test.mijn-teamuitje.nl/sid#7fe14d27a518][rid#7fe14d4f0b70/initial] (3) [perdir /var/www/nl.mijn-teamuitje-test/] add path info postfix: /var/www/nl.mijn-teamuitje-test/index.php -> /var/www/nl.mijn-teamuitje-test/index.php/tools/required/alert.php
83.84.100.81 - - [16/Jul/2014:16:49:04 +0200] [www.test.mijn-teamuitje.nl/sid#7fe14d27a518][rid#7fe14d4f0b70/initial] (3) [perdir /var/www/nl.mijn-teamuitje-test/] strip per-dir prefix: /var/www/nl.mijn-teamuitje-test/index.php/tools/required/alert.php -> index.php/tools/required/alert.php
83.84.100.81 - - [16/Jul/2014:16:49:04 +0200] [www.test.mijn-teamuitje.nl/sid#7fe14d27a518][rid#7fe14d4f0b70/initial] (3) [perdir /var/www/nl.mijn-teamuitje-test/] applying pattern '^index\\.php\\/(.*)$' to uri 'index.php/tools/required/alert.php'
83.84.100.81 - - [16/Jul/2014:16:49:04 +0200] [www.test.mijn-teamuitje.nl/sid#7fe14d27a518][rid#7fe14d4f0b70/initial] (2) [perdir /var/www/nl.mijn-teamuitje-test/] rewrite 'index.php/tools/required/alert.php' -> 'index.php'
83.84.100.81 - - [16/Jul/2014:16:49:04 +0200] [www.test.mijn-teamuitje.nl/sid#7fe14d27a518][rid#7fe14d4f0b70/initial] (3) [perdir /var/www/nl.mijn-teamuitje-test/] add per-dir prefix: index.php -> /var/www/nl.mijn-teamuitje-test/index.php
83.84.100.81 - - [16/Jul/2014:16:49:04 +0200] [www.test.mijn-teamuitje.nl/sid#7fe14d27a518][rid#7fe14d4f0b70/initial] (1) [perdir /var/www/nl.mijn-teamuitje-test/] initial URL equal rewritten URL: /var/www/nl.mijn-teamuitje-test/index.php [IGNORING REWRITE]

任何帮助将不胜感激,我现在​​整天都在做这个!

4

2 回答 2

0

我要结束这个问题。重写规则没有任何问题。Apache 有问题,可能是因为我(不正确地)在 Debian6 上安装了 PHP 5.4。我安装了 Debian 7,它解决了我的问题。

我的问题中 DPI 标志的使用是正确的,如果您遇到 PATH_INFO 问题,请尝试。

于 2014-07-20T14:29:03.813 回答
0

与其尝试禁用所有 PATH INFO,不如只为调用而不是为工具执行此操作?

RewriteRule ^index\.php/(?!tools) index.php [L,DPI]
于 2014-07-16T15:11:36.220 回答