有类似的帖子,但我似乎无法找到我需要的东西。
我希望我的.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 这是我不想要的。
我知道这很简单,但我似乎无法到达那里。
答案 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]