我正在从一个目录中提供内容,就好像它是其他目录一样,如下:
mysite.com/dir/etc ==> mysite.com/realdir/dir/etc
为了达到这个目的,我的htaccess文件中的规则是:
RewriteCond %{REQUEST_URI} ^\/([^\/]+)[\/]?(.*)$
RewriteCond realdir\/%1 -d
RewriteRule ^ realdir/%1/%2 [L]
但这也允许直接访问真实路径。我不希望我的用户能够访问真实路径,我只想要一条路径来访问内容。我尝试过重定向,但是我造成了无限循环。
请帮忙。谢谢你的建议。
答案 0 :(得分:1)
您可以使用:
# No acces to realdir, redirect to root with same path
RewriteCond %{THE_REQUEST} \s/+realdir/(.*)\s [NC]
RewriteRule ^ /%1 [R=301,L]
# rewrite mysite.com/dir/etc ==> mysite.com/realdir/dir/etc
RewriteCond realdir/$1 -d
RewriteRule ^([^/]+)[/]?(.*)$ realdir/$1/$2 [L]
答案 1 :(得分:0)
这对我有用......
# redirecting when trying to access real location
# and avoiding loops checking the redirect status
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} ^\/realdir(.*)$ [NC]
RewriteRule ^ %1 [L,R=301]
# serve realdir if realdir/subdir exists
RewriteCond %{REQUEST_URI} ^\/([^\/]+)(.*)$
RewriteCond realdir/%1 -d
RewriteRule ^ realdir\/%1%2 [L]