Regex 如何使用带有非www重定向的rewriterule删除子目录

Regex 如何使用带有非www重定向的rewriterule删除子目录,regex,apache,.htaccess,mod-rewrite,redirect,Regex,Apache,.htaccess,Mod Rewrite,Redirect,所以我一直在摆弄.htaccess,我能够删除一个子目录和一个非www子目录。请查找以下代码: Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC] RewriteRule ^(.*) http://domain.com/$1 [R=301,L] RewriteCond %{REQUEST_URI} !(.*)subdir RewriteRule ^(.*)$ subdir/$1 [L]

所以我一直在摆弄.htaccess,我能够删除一个子目录和一个非www子目录。请查找以下代码:

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
RewriteRule ^(.*) http://domain.com/$1 [R=301,L]
RewriteCond %{REQUEST_URI} !(.*)subdir
RewriteRule ^(.*)$ subdir/$1 [L]
这可以重定向:

www.domain.com/subdir/file

www.domain.com/file

domain.com/file

但是,它不能重定向

domain.com/subdir/file

domain.com/file


这是我对这段代码唯一的问题。有人能告诉我我做错了什么吗?非常感谢您的帮助。:)

您可以在以下条件中使用
条件:

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\. [NC,OR]
RewriteCond %{THE_REQUEST} /subdir/ [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^(?:subdir/)?(.*)$ http://%1/$1 [NC,R=302,L]

嗨@anubhava,我试过了,结果导致了一个错误,我在我的Apache上实际测试了太多重定向。在此之前你还有其他规定吗?没有。等等,我应该替换域最后一行中的%1吗?不,还是不。虽然在这之后我已经重写了规则。谢谢!你就是那个男人@anubhava!:)