2014-08-31 67 views
1

我试图允许访问某些资源,如JS,CSS等,同时静静地将其他所有内容重定向到/index.php,这将最终决定内容的其余部分是否存在或不。这是为了允许没有任何事情的友好URL(即静态文件)通过PHP。.htaccess文件将子目录作为根目录

我正在测试/ public_html/test /目录中的代码,但一些.htaccess指令需要/测试/而其他则不需要。当我的工作达到我的满意度时,我将把它移动到/ public_html /目录下,但我不想编辑文件以使它在新的位置工作。我所说的是,我希望文件以相同的方式工作,无论位置如何,也无需对完整路径进行硬编码(这样我就可以将其移动到具有不同结构的服务器)。

我在http://localhost/test/以下.htaccess文件:

Options -Indexes 

RewriteEngine On 
RewriteBase/

# Specifically deny /includes/* 
RewriteRule ^includes/ - [R=404,L] 

# Allow /images/*, /css/* & /js/* but deny everything else, e.g. /lib/* 
RewriteCond %{REQUEST_URI} !^/test/images/ 
RewriteCond %{REQUEST_URI} !^/test/css/ 
RewriteCond %{REQUEST_URI} !^/test/js/ 
RewriteRule . - [R=404,L] 

我要改变过去的规则重写的index.php以后,而不是给一个404的那一刻我只想让.htaccess文件工作得更好一些。

如何使规则保持一致(即从RewriteCond中删除test)?我希望能够在/ test /目录中对其进行测试,然后将其移至web根目录(即inside/public_html /)或甚至更低一些,而不更改路径。我试图改变RewriteBase,但我不明白它到底做了什么,我也没有看到与其他值有任何区别。

如何将此.htaccess文件工作,如果我将其移动到与/ public_html /相同的级别?

理想情况下,我想以下结构:

public_html/ 
public_html/test/ 
public_html/test/css/ 
public_html/test/images/ 
public_html/test/includes/ 
public_html/test/js/ 
public_html/test/lib/ 
public_html/test/index.php 
public_html/.htaccess 

,如果我将它移动到这里的一切仍然有效:

public_html/ 
public_html/css/ 
public_html/images/ 
public_html/includes/ 
public_html/js/ 
public_html/lib/ 
public_html/index.php 
.htaccess 

回答

0

您可以在规则之前使用动态RewriteBase生成规则:

Options -Indexes 

RewriteEngine On 

## Determine the RewriteBase automatically/dynamically 
RewriteCond $0#%{REQUEST_URI} ^([^#]*)#(.*)\1$ 
RewriteRule ^.*$ - [E=BASE:%2] 

# Specifically deny /includes/* 
RewriteRule ^includes/ - [R=404,L] 

# Allow /images/*, /css/* & /js/* but deny everything else, e.g. /lib/* 
RewriteCond %{REQUEST_URI} !^%{ENV:BASE}(images|css|js)/ [NC] 
RewriteRule . - [R=404,L] 
+0

谢谢!你能解释它的作用吗?我知道'$ 0'匹配'^。* $',但其他人做了什么? – 2014-08-31 08:29:27

+0

这个技巧在这里解释:http://www.zeilenwechsel.de/it/articles/8/Using-mod_rewrite-in-.htaccess-files-without-knowing-the-RewriteBase.html – anubhava 2014-08-31 08:53:32

+0

这是否适合你? – anubhava 2014-08-31 14:14:22

相关问题