在从根和子文件夹工作的RewriteRule中最小化dir-hardcoding的方法

时间:2012-02-07 12:24:55

标签: .htaccess redirect root subdirectory

我有这个项目,我在本地运行从Web服务器的根目录。这是一个学校项目,所以它将被部署到我学校的服务器,这需要我把它放在一个子文件夹中。这会导致静态+ css重定向出现问题,因为从子文件夹运行时它显然不像现在编写的那样工作,我不想将每个重写规则硬编码到子文件夹,因为那是丑陋的,如果我需要,很难切换到使用从root运行它。

该项目在.htaccess中具有以下规则。

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{THE_REQUEST} ^GET\ /static/
RewriteRule ^static/(.*) /$1 [L,R=301]
RewriteCond %{THE_REQUEST} ^GET\ /css/
RewriteRule ^css/(.*)$ static/css/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

是否有一种方法可以让我从根和子文件夹中获得上述重写,无需提出任何问题,或采用哪种方式使差异最小化? (我不需要在每个规则中对子文件夹进行硬编码)

1 个答案:

答案 0 :(得分:1)

我看到它的方式(假设.haccess也在子文件夹中)

Options +FollowSymlinks
RewriteEngine On

#you might need a rewritebase, but not necessarily 
#testing
#RewriteBase /
#production
#RewriteBase /subfolder

#less strict condition. will only be a problem if there is another folder also named 'static' inside 'static' :-)
RewriteCond %{THE_REQUEST} /static/
RewriteRule ^static/(.*) $1 [L,R=301]

#condition here is not needed
RewriteRule ^css/(.*)$ static/css/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]