我想将某个目录下的合法目录名称重定向到PHP文件。我发现this answer似乎在说我可以在根目录中做这样的事情.htaccess:
RewriteEngine on
RewriteRule /([^/]+) processDir.php?dir=$1 [B,QSA]
我认为这正是我正在寻找的,但有办法:
答案 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"];
?>
我对正则表达式做的主要修改(有人稍后会修复)是坚持在字符串的末尾加斜杠。