我知道这里有几个这样的问题,所以原谅我不能把它拼凑在一起 - 我想要一个子目录(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]
由于
答案 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类似的东西