0

我想使用类似的目录___test/___test/subdirectory1/包含一些内容,但从不在 url 中显示此路径。相反,我希望 url/demo/subdirectory1或者说,/demo/subdirectory1/images/image.jpg指向/___test/subdirectory1/images/image.jpg和浏览器上的 url 保持为:/demo/subdirectory1/images/image.jpg。实际上替换___testdemo

我尝试过的各种问题虽然看起来有时有效,但它是:

RewriteRule ^demo/subdirectory1(.*) ___test/subdirectory1/$1

以上仅适用于: demo/subdirectory1demo/subdirectory1/(使用现有内容示例,其中包含 index.html /___test/subdirectory1/)但不适用于 demo/subdirectory1/somethingmore...尽管在这种情况下内容也存在,但不幸的是它在 url 中显示了真实的目录路径。

此外,我使用以下内容通过 404 到从/___testurl 开始的任何内容:

RewriteCond %{THE_REQUEST} ^GET\ /___test/
RewriteRule ^___test/(.*) - [R=404,L,NC]

它可以工作,但是当我添加它时,不幸的是(再次),前一个也变成了 404。但对我来说最重要的是把第一部分做好,即使我从来没有做过第二部分。

任何帮助都非常感谢。谢谢。

编辑 1:我也尝试在/___test/subdirectory1/.htaccess

Options +FollowSymLinks
RewriteEngine On
RewriteBase /___test/subdirectory1

没有成功。

编辑 2:虽然效果不佳,但到目前为止我在 Jon Lin 的帮助下想出的最好的方法如下:

RewriteCond %{REQUEST_URI} ^/demo/subdirectory1(.*)
RewriteCond %{DOCUMENT_ROOT}/___test/subdirectory1/%1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/___test/subdirectory1/%1 -d
RewriteRule ^ /___test/subdirectory1/%1 [L]

/demo/subdirectory1<- 好的

/demo/subdirectory1/<- 好的

/demo/subdirectory1/subdirectory2<- 暴露真实路径

/demo/subdirectory1/subdirectory2/<- 好的

/demo/subdirectory1/subdirectory2/subdirectory3<- 暴露真实路径

/demo/subdirectory1/subdirectory2/subdirectory3/<- 好的

正如你所看到的,任何比subdirectory1问题更深层次的东西。我只是不明白为什么。在 linux apache 上的站点根目录中存在的干净 .htaccess 文件上进行测试(没有其他更深的文件)。

4

1 回答 1

0

在大多数情况下,您都在正确的轨道上,但您可能需要添加一些检查以使__test目录不暴露:

RewriteEngine On

# prevent mod_dir from redirecting to trailing slash
RewriteCond %{REQUEST_URI} ^/demo/subdirectory1/(.*[^/])
RewriteCond %{DOCUMENT_ROOT}/___test/subdirectory1/%1 -d    
RewriteRule ^ /demo/subdirectory1/%1/ [L,R=301]

RewriteCond %{REQUEST_URI} ^/demo/subdirectory1$
RewriteRule ^ /demo/subdirectory1/ [L,R=301]


# check if the file actually exists first
RewriteCond %{REQUEST_URI} ^/demo/subdirectory1/(.*)
RewriteCond %{DOCUMENT_ROOT}/___test/subdirectory1/%1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/___test/subdirectory1/%1 -d

# and rewrite only if the resource exists within ___test
RewriteRule ^ /___test/subdirectory1/%1 [L]

使用 .确保您已在当前迭代中结束重写[L]

您的 404 规则应该有效,但您应该删除尾部斜杠,以便 mod_dir 不会尝试重定向和公开___test目录:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /___test
RewriteRule ^ - [R=404,L,NC]
于 2012-10-02T01:24:28.340 回答