htaccess子目录作为根目录

时间:2013-09-26 20:00:30

标签: .htaccess

我知道这里有几个这样的问题,所以原谅我不能把它拼凑在一起 - 我想要一个子目录(mainsite)显示当有人只访问root时,而网站的其余部分仍然是正常。

结构是:

www.mysite.com
  --globalcss
  --sites--mainsite--index.php
                   --anotherpage.php
                   --css--style.css
         --anothersite
         --anothersite

当mainsite索引在根目录中显示时,我也试图在mainsite索引页面(../../globalcss/global.css)上获取相对css链接。有一次我让页面工作,但是css链接错误地显示为sites/mainsite/globalcss/,忽略了../../(如果可能的话,我宁愿保持相对,因为我的localhost根不匹配)。

这是我到目前为止所做的:

RewriteEngine on
# attempting to get only requests in the root directory
RewriteCond %{REQUEST_URI} !(sites|globalcss)
# show the mainsite content instead
RewriteRule ^(.*)$ /sites/mainsite/$1 [L]   

由于

1 个答案:

答案 0 :(得分:1)

因此,“有人仅访问根”,我认为您的意思是http://www.mysite.com/,而不是http://www.mysite.com/anotherpage.php。如果是这样的话:

RewriteEngine on
RewriteCond %{REQUEST_URI} !globalcss
RewriteCond %{REQUEST_URI} !^/sites/mainsite
RewriteRule ^$ /sites/mainsite/ [L] 

如果您实际上是指任何非子目录的内容,例如:http://www.mysite.com/即可,http://www.mysite.com/a-file.php没问题,但http://www.mysite.com/css/不应该重写,那么规则需要看起来像:

RewriteRule ^([^/]*)$ /sites/mainsite/$1 [L] 

其他一切都是一样的。

正确设置正则表达式的方式:

RewriteRule ^(.*)$ /sites/mainsite/$1 [L]   

重写除“globalcss”之外的所有内容。根据您的要求,“当网站的其余部分保持正常时,这似乎并不存在。”


  

唯一的问题是我的网站/ mainsite / css现在无法正常工作,因为它相对于根而不是原始位置。我该如何解决这个问题?我也有一个js文件夹,我认为它有相同的问题

浏览器看起来相对于root,因为这就是它所知道的。所有它知道的是“我去这里:http://mysite.com/我看到链接"css/some_file.css" ,所以它唯一可以做的就是去http://mysite.com/css/some_file.css,浏览器知道所有这些重写或别名都不存在于服务器上。

如果你想让css能够被访问,那么你也需要一个规则(这实际上是一种可怕的,可怕的方式):

RewriteEngine on
RewriteCond %{REQUEST_URI} !globalcss
RewriteCond %{REQUEST_URI} !^/sites/mainsite/css
RewriteRule ^css/(.*)$ /sites/mainsite/css/$1 [L] 

可能与js类似的东西