.htaccess:内部重写到子文件夹,拒绝通过子文件夹访问

时间:2014-04-18 18:26:52

标签: regex apache .htaccess mod-rewrite

在我的页面上,我将silverstripe框架安装在子文件夹current中。我有两个.htaccess文件从URL中删除“当前”目录。一个在根:

root htaccess:

AddOutputFilterByType deflate text/html text/plain text/css text/javascript application/javascript application/x-javascript application/rss+xml
# Deployment scripts
RewriteCond %{REQUEST_FILENAME} /deploy/
RewriteRule ^(.*)$ $1 [L]


### SILVERSTRIPE START ### 
# See: http://www.silverstripe.org/installing-silverstripe/show/12328#post283997
<IfModule mod_rewrite.c> 
  RewriteEngine On 
  RewriteBase /current/
  RewriteRule ^(.*)$ /current/$1 
</IfModule> 
### SILVERSTRIPE END ###

AddHandler application/x-httpd-php54 .php

current文件夹中的一个:

### SILVERSTRIPE START ###
<Files *.ss>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Files>

<Files web.config>
    Order deny,allow
    Deny from all
</Files>

ErrorDocument 404 /assets/error-404.html
ErrorDocument 500 /assets/error-500.html

<IfModule mod_alias.c>
    RedirectMatch 403 /silverstripe-cache(/|$)
</IfModule>

<IfModule mod_rewrite.c>
    SetEnv HTTP_MOD_REWRITE On
    RewriteEngine On
    RewriteBase '/'

    RewriteCond %{REQUEST_URI} ^(.*)$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* framework/main.php?url=%1&%{QUERY_STRING} [L]
</IfModule>
### SILVERSTRIPE END ###

此设置存在的问题是,该网站可用作 domain.com domain.com/current

我如何通过current目录禁止/拒绝访问?

最佳解决方案是外部重定向到同一页面,但URL中没有current。如何在没有URL中的当前目录的情况下创建到站点的重定向?

所以所有网址都重写(外部),如下所示:

  • domain.com/current - &gt; domain.com
  • domain.com/current/example - &gt; domain.com/example
  • domain.com/current/what/ever/ - &gt; domain.com/what/ever

到目前为止,我找到了这个答案:Url rewrite subfolder to root and forbid accessing subfolder。解决方案似乎不适用于我的情况。 如果我使用此解决方案访问该页面,则会收到403错误和aditional错误500,因为找不到错误文档。

2 个答案:

答案 0 :(得分:1)

  

我如何禁止/拒绝通过当前目录进行访问?

将此规则作为/current/.htaccess中的第一条规则插入:

# if direct request is made for /current/abc then external redirect to /abc
RewriteCond %{THE_REQUEST} \s/current/(\S*) [NC]
RewriteRule ^ /%1  [L,R=301,NE]
  • THE_REQUEST变量表示Apache从您的浏览器收到的原始请求,并且在执行一些重写规则后不会被覆盖。
  • 此规则将禁止您的用户发送任何/current/ URI的直接请求。

答案 1 :(得分:0)

问题在于您可以找到.htaccess文件。