mod_rewrite .htaccess仅匹配文件,也需要目录匹配

时间:2011-11-13 22:49:12

标签: .htaccess mod-rewrite

我正在尝试将所有流量重新写入old_site文件夹

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.+) old_site/$1/$2 [NC,QSA,L]

适用于

/blog/profile/index.php OR /blog/posts.php

但为什么不匹配

/blog/login/ or /blog/login

我是否需要指定一个单独的规则来处理包含和不包含斜杠/?

的目录

编辑:

根据slugonamission我添加了-d指令

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*) old_site/$1/$2 [NC,QSA,L]

它适用于/ blog / login /但不适用于/ blog / login,不知道有没有尾部斜杠,它不被视为目录?有没有办法修改当前规则,还是我需要一个新的添加斜杠?

3 个答案:

答案 0 :(得分:2)

你几乎做到了! 这是应该工作的:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/(.*)/$ old_site/$1/$2 [NC,QSA,L]
RewriteRule ^(.*)/(.*)$ old_site/$1/$2 [NC,QSA,L]

请告诉我它是否有效

:)

顺便说一下,这是我最喜欢的检查regexp的工具:

http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)

答案 1 :(得分:1)

你快到了!您还需要单独处理目录,这是通过-d条件完成的。

答案 2 :(得分:0)

通过更多研究,以下模式符合我的需要:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)(/|)$ old_site/$1/$2/ [NC,QSA,L]

/blog/profile/index.php /blog/posts.php

包括带有和不带斜杠的目录:

/博客/登录/
/博客/登录