我想将某个目录下的合法目录名重定向到PHP文件。我发现this answer,这似乎是说,我可以做这样的事情在根的.htaccess:将嵌套目录重定向到.php
RewriteEngine on
RewriteRule /([^/]+) processDir.php?dir=$1 [B,QSA]
我想这就是我要找的,但有一个办法:
- 将它限制在目录中,但允许嵌套目录?
- 仅筛选目录:我不想处理文件。
我想将某个目录下的合法目录名重定向到PHP文件。我发现this answer,这似乎是说,我可以做这样的事情在根的.htaccess:将嵌套目录重定向到.php
RewriteEngine on
RewriteRule /([^/]+) processDir.php?dir=$1 [B,QSA]
我想这就是我要找的,但有一个办法:
我打算删除这个问题,但有人收藏它,所以我会回答它。
使用像一个.htaccess这个
RewriteEngine on
RewriteRule ([^/]*)/$ processDir.php [B,QSA]
,然后你可以processDir.php这个变量来使用GET而不是:
<?
dir is <?php
echo $_SERVER["REQUEST_URI"];
?>
我对正则表达式提出的主要修改(稍后有人会修正)是坚持在字符串的末尾加上斜线。
我想你要找的是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,现在我有机会尝试这一切,我会回复评论(或者接受这个)。 [B,QSA]做什么(当然,你也可以链接到某些东西)? – 2013-02-20 18:06:13
@Y B用于转义,QSA用于查询字符串。虽然,我只是单单从你的帖子中找到那些人。更多细节请参见http://httpd.apache.org/docs/current/rewrite/flags.html – 2013-02-21 00:26:28