htaccess重写/删除父目录

时间:2011-12-20 20:01:05

标签: .htaccess mod-rewrite url-rewriting

有类似的帖子,但我似乎无法找到我需要的东西。

我希望我的.htacess能够重写“一级”。 Url会像某些人一样 http://www.site.com/variable_dir/ 要么 http://www.site.com/variable_dir/sub_dir

我需要基本上重写请求 http://www.site.com/ 要么 http://www.site.com/sub_dir

我希望网址仍然显示原始网址 http://www.site.com/variable_dir/ 要么 http://www.site.com/variable_dir/sub_dir

我目前有

    RewriteEngine On          
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php [L]

这会重定向到我想要的位置,但这会将URL更改为 http://www.site.com/ 要么 http://www.site.com/sub_dir 这是我不想要的。

我知道这很简单,但我似乎无法到达那里。

1 个答案:

答案 0 :(得分:1)

以下规则需要将http://www.site.com/variable_dir/重写为http://www.site.com/,将http://www.site.com/variable_dir/sub_dir重写为http://www.site.com/sub_dir

RewriteEngine on
RewriteBase /

#for a request to /variable_dir
RewriteCond %{REQUEST_URI} ^/variable_dir/(.+)$
#rewrite it to directory without variable_dir
RewriteRule . /%1 [L]

编辑: 如果目录不是字面variable_dir,则上述规则将不起作用。但是,如果您有一个简短的目录列表,则可以按以下方式枚举它们。

RewriteEngine on
RewriteBase /

#only apply if this directory does not exist
RewriteCond %{REQUEST_FILENAME} !-d
#for any direcory enumerated here  
RewriteCond %{REQUEST_URI} ^/(variable_dir|dir2|dir3|etc)/(.+)$
#rewrite it to directory without variable_dir
RewriteRule . /%2 [L]

如果没有,那么理想情况下,目录都会有共同点,因此您可以限制规则的影响。如果你想要一个完全可变的目录,没有任何共同点,我不推荐它,但你可以尝试

RewriteEngine on
RewriteBase /

#only apply if this directory does not exist
RewriteCond %{REQUEST_FILENAME} !-d
#skip any top level directory
RewriteCond %{REQUEST_URI} ^/[^/]+/(.+)$
#rewrite it to directory without variable_dir
RewriteRule . /%1 [L]

编辑: 最后,如果尾部斜杠是可选的,如评论中的示例所示,请将上面的RewriteCond和规则更改为

#skip any top level directory, optional trailing slash
RewriteCond %{REQUEST_URI} ^/[^/]+(/(.+))?$
#rewrite it to directory without variable_dir
RewriteRule . /%2 [L]