所以我有一个根文件夹,因为它是.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上查看该页面。任何帮助都会很棒!
答案 0 :(得分:0)
我只是想通了。 确保检查Apache版本!!! 版本1.x不识别与Perl兼容的正则表达式,而是使用POSIX Extended正则表达式。将上面的.*
重写为[A-Za-z0-9/=-_']+
对我有用。我将不得不更多地阅读POSIX风格的内容以了解如何接受句点(。),但它现在可以使用。