.htaccess - 在保留其他文件的同时隐藏URL中的目录

时间:2013-07-14 18:01:38

标签: .htaccess rewrite rule

我开发了一个巨大的工具工作室,每个工具在/ tools /文件夹中都有自己的目录。因此,如果您有一个名为 example 的工具,则URL将为/ studio-dir / tools / example /。

我正在尝试从URL隐藏/ tools /目录,同时确保/ tools /目录之外的其他文件仍然有效。例如,/ index.php文件和/ admin /目录应该保留。

我试过这个,但它只会在一切上造成大量的404错误。我知道它可能已经过时了,我糟透了重写URL。 :P

RewriteCond %{REQUEST_URI} !^/tools/
RewriteRule ^/?([^/]+)$ /tools/$1 [L]

如果你仍然感到困惑,我想:

  

http://www.example.com/studio/ 工具/示例/ index.php的

能够加载为:

  

http://www.example.com/studio/ 示例/ index.php的

同时仍然保留/ tools /目录,并允许加载/ tools /目录之外的其他文件。

这可能吗?

2 个答案:

答案 0 :(得分:3)

你需要这样的东西:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule    /studio/(.*) /studio/tools/$1    [L]
 </IfModule>

问题是,如果requeste文件同时位于studio文件夹和tools-folder中,它将无法工作。

但是没有办法阻止这种情况,因为如果网址是指/ studio / tools /或/ studio /

,服务器现在就无法做到

编辑:您可以从可见的网址中删除/ tools /,如下所示:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule    /studio/(.*) /studio/tools/$1    [L]
    RewriteRule    /studio/tools/(.*) /studio/$1    [L,R=302]
 </IfModule>

答案 1 :(得分:1)

在这个例子中没有404,但它只能隐藏一个目录

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+dirname/([^\s]+) [NC]
RewriteRule ^ %1 [R=301,L]

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