将嵌套目录重定向到.php

时间:2013-02-19 05:57:09

标签: apache .htaccess

我想将某个目录下的合法目录名称重定向到PHP文件。我发现this answer似乎在说我可以在根目录中做这样的事情.htaccess:

RewriteEngine on
RewriteRule /([^/]+) processDir.php?dir=$1 [B,QSA]

我认为这正是我正在寻找的,但有办法:

  • 将其限制为仅限目录,但允许嵌套目录?
  • 仅过滤目录:我不想处理文件。

2 个答案:

答案 0 :(得分:2)

我认为您正在寻找的是RewriteCond,它允许您有条件地应用重写规则。这个检查是否是某个目录:

RewriteCond %{REQUEST_FILENAME} -d

您可以将它放在RewriteRule之上,如下所示:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule /([^/]+) processDir.php?dir=$1 [B,QSA]

这将适用于您的问题中的方法或您的答案,需要注意的重要一点是-d标志在应用您的规则之前首先检查请求是否是有效目录,这就是您所看到的想要。

根据我收集的内容,问题的第二部分是嵌套目录。正如你所说,你的正则表达式专门只寻找一个目录(没有斜杠)。如果你想改变它,你可以这样做:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule /?some_dir/(.*) processDir.php?dir=$1 [B,QSA]

这将获取some_dir下面的任何有效目录并将其提供到您的php文件中。

最后要注意的是,您不需要将所有这些都放入根.htaccess文件中。您可以将.htaccess文件放在要重写的目录中。这种方式或其他方式没有太大区别,但我发现如果你不确定你在做什么,它可以简化语法。

答案 1 :(得分:0)

我打算删除这个问题,但是有人喜欢它,所以我会回答它。

使用像这样的.htaccess

RewriteEngine on
RewriteRule ([^/]*)/$ processDir.php [B,QSA]

然后你的processDir.php可以使用这个变量而不是使用get:

<?
dir is <?php
echo $_SERVER["REQUEST_URI"];
?>

我对正则表达式做的主要修改(有人稍后会修复)是坚持在字符串的末尾加斜杠。