从文件夹创建子域,但拒绝文件夹访问

时间:2014-01-24 22:11:47

标签: apache .htaccess mod-rewrite

好吧,我花了近4个小时在网站上搜索解决方案,另外2个小时搜索谷歌,当大多数网站复制粘贴数据时,这并不是很有用。所以在这里我决定寻求一些帮助。

我成功创建了一个子域名,让我们说http://admin.myhost.com,它基本上从文件夹admin获取数据。问题是,当我放置http://myhost.com/admin时,脚本仍然可以访问。假设我想让这个文件夹无法访问,重定向到自定义文件,例如index.php?template=error404当某个文件通过url http://myhost.com/admin执行时。我已将此行添加到.htaccess

RewriteRule ^admin(.*) /index.php?template=error404 [L]

它就像这样结束了。

Options +FollowSymlinks

Options -Indexes

<FilesMatch "\.(tpl|ini|log)">
 Order deny,allow
 Deny from all
</FilesMatch>

RewriteEngine On

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?map=google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?map=google_base [L]
RewriteRule ^download(.*) /index.php?template=error404 [L]
RewriteRule ^admin(.*) /index.php?template=error404 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?seo_url=$1 [L,QSA]

它实际上只有在我删除admin文件夹中的空.htaccess时才会起作用(它只显示RewriteEngine),但是当我这样做时,网站http://admin.myhost.com会抛出一个http错误500,并且它不再可访问。如果我再次添加管理文件夹中的.htaccess,表明RewriteEngine on rule,则子域再次开始工作,但同样,该文件夹可通过URL添加/admin

来访问

几个小时后我似乎无法找到解决这个问题的方法。有没有办法做到这一点?我做错了吗?

1 个答案:

答案 0 :(得分:6)

/admin/.htaccess有这条规则:

RewriteEngine On

# block access if HOSTNAME is not starting with admin.    
RewriteCond %{HTTP_HOST} !^admin\. [NC]
RewriteRule ^ - [F]

或者如果你想显示/index.php?template=error404那么

RewriteCond %{HTTP_HOST} !^admin\. [NC]
RewriteRule ^ /index.php?template=error404 [L,QSA]