我试图允许访问某些资源,如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'匹配'^。* $',但其他人做了什么? – 2014-08-31 08:29:27
这个技巧在这里解释: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
这是否适合你? – anubhava 2014-08-31 14:14:22