内部目录中的Mod_Rewrite无法正确匹配

时间:2012-12-12 02:21:00

标签: php mod-rewrite

所以我有一个根文件夹,因为它是.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上查看该页面。任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

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