我开发了一个巨大的工具工作室,每个工具在/ 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 /目录之外的其他文件。
这可能吗?
答案 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]