我想使用像___test
这样的目录/___test/subdirectory1/
并拥有一些内容,但绝不会在网址中显示此路径。相反,我希望网址/demo/subdirectory1
或说/demo/subdirectory1/images/image.jpg
指向/___test/subdirectory1/images/image.jpg
,并且浏览器上的网址保持为:/demo/subdirectory1/images/image.jpg
。实际上将___test
替换为demo
我尝试过各种各样的问题虽然它看起来有时有效但是:
RewriteRule ^demo/subdirectory1(.*) ___test/subdirectory1/$1
以上内容仅适用于:demo/subdirectory1
或demo/subdirectory1/
(现有内容示例中的/___test/subdirectory1/
内部为index.html)但demo/subdirectory1/somethingmore...
上没有,但内容位于/___test
在这种情况下,不幸的是它显示了URL中的真实目录路径。
此外,我使用以下内容通过404到网址中RewriteCond %{THE_REQUEST} ^GET\ /___test/
RewriteRule ^___test/(.*) - [R=404,L,NC]
开头的任何内容:
/___test/subdirectory1/.htaccess
它有效,但是当我添加它时,不幸的是(之后),之前也进入了404。 但对我来说最重要的是使第一部分正确,即使我从未做过第二部分工作。
任何帮助真的很感激。 感谢。
编辑1:
我还尝试在Options +FollowSymLinks
RewriteEngine On
RewriteBase /___test/subdirectory1
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]
没有成功。
编辑2: 虽然效果不好,但迄今为止我在Jon Lin的帮助下提出的最好成绩如下:
/demo/subdirectory1
/demo/subdirectory1/
< - 确定
/demo/subdirectory1/subdirectory2
< - 确定
/demo/subdirectory1/subdirectory2/
< - 公开真实路径
/demo/subdirectory1/subdirectory2/subdirectory3
< - 确定
/demo/subdirectory1/subdirectory2/subdirectory3/
< - 公开真实路径
subdirectory1
< - 确定
正如您所看到的,任何比{{1}}更深层次的问题都存在问题。我只是无法理解为什么。在linux apache上的站点根目录中存在的干净.htaccess文件(没有其他更深层次)上进行测试。
答案 0 :(得分: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]