0

所以我有一个根文件夹,因为它是 .htaccess (它是一个 WordPress 版本):

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

我在其中有一个名为 safetytraining-2 的子目录。对子目录的请求工作正常,我在 safetytraining-2 中有一个名为 true.php 的文件,它的内容是这样的:

<html>
   <body>
      <?php var_dump($_GET);
      ?>
   </body>
</html>

现在在 safetytraining-2 中,我有一个 .htaccess,我正在尝试用它来测试 mod_rewrite。这是它的内容:

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond  %{THE_REQUEST}      ^true\.php(.*)$
   RewriteRule  ^true\.php(.*)$     -                   [L]

   RewriteRule  ^(.*)$          true.php?p=$1       [L]
</IfModule>

现在问题来了。当我访问 website.com/safetytraining-2/foobar 时,我得到以下输出:

array(1) { ["p"]=> string(8) "true.php" }

这真的让我很困惑。我在第一条规则中加入了尝试阻止 apache 递归应用重写规则的条件,但我猜它没有帮助。无论我在 /safetytraining/ 之后放了什么,我都会不断得到这个输出。这里有什么帮助吗?您可以在 athanclark.com/safetytraining-2 查看该页面。任何帮助都是极好的!!

4

1 回答 1

0

我刚刚想通了。确保检查您的 Apache 版本!!!1.x 版本不识别 Perl 兼容的正则表达式,而是使用 POSIX 扩展正则表达式。重写.*上面的 s[A-Za-z0-9/=-_']+为我工作。我将不得不阅读更多关于 POSIX 风格的内容,以了解如何接受句点 (.),但它现在有效。

于 2012-12-12T04:18:17.007 回答