Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess htaccess子目录作为根目录_.htaccess - Fatal编程技术网

.htaccess htaccess子目录作为根目录

.htaccess htaccess子目录作为根目录,.htaccess,.htaccess,我知道这里有一些类似的问题,所以请原谅我不能把它们拼凑在一起-我希望在有人只访问根目录时显示一个子目录(mainsite),而站点的其余部分保持正常 结构是: www.mysite.com --globalcss --sites--mainsite--index.php --anotherpage.php --css--style.css --anothersite --ano

我知道这里有一些类似的问题,所以请原谅我不能把它们拼凑在一起-我希望在有人只访问根目录时显示一个子目录(mainsite),而站点的其余部分保持正常

结构是:

www.mysite.com
  --globalcss
  --sites--mainsite--index.php
                   --anotherpage.php
                   --css--style.css
         --anothersite
         --anothersite
我还试图让主站点索引页面(../../globalcss/global.css)上的相对css链接在主站点索引显示在根目录中后工作。有一次我让页面正常工作,但是css链接错误地显示为
sites/mainsite/globalcss/
,忽略了
。/../
(如果可能的话,我宁愿保持它们的相对性,因为我的本地主机根不匹配)

以下是我到目前为止的情况:

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]   
谢谢

所以“某人只访问根”,我想你的意思是
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文件夹,我想它也有同样的问题

浏览器看起来是相对于根的,因为它只知道这些。它只知道“我在这里:
http://mysite.com/
我看到链接
“css/some_file.css”
,所以它唯一能做的就是转到
http://mysite.com/css/some_file.css
,浏览器对所有这些仅存在于服务器上的重写或别名一无所知

如果您希望css能够被访问,那么您也需要一个规则(这真的是一种非常糟糕的方式):


可能类似于js的东西也

这样,您的live server上的版本会更接近,您可以使用别名域,而不会出现上述问题。感谢@Prix的提示,但我在多台pc上使用一个xampp实例运行dropbox。同步的好处大于我与t的问题您不需要多个XAMP实例,只需在
vhosts.conf
httpd.conf
文件中添加新的virtualhost即可,具体取决于它的配置方式。这是可行的(顶部部分),唯一的问题是我的站点/mainsite/css现在不起作用了,因为它看起来是相对于根目录的,而不是原始位置的。我如何解决这个问题?我在那里也有一个js文件夹,我想它也有同样的问题。@John都取决于你链接的方式,浏览器不知道服务器上发生了什么,它只看到HTML并发送请求UEST上一个重写规则不起作用,但添加了它:
RewriteCond%{REQUEST_URI}!^css/(*)$
。现在我在同一目录下的images文件夹中遇到了同样的问题。我如何添加它,尝试了同样的方法,添加了另一行并将“css”替换为“images”,但没有成功。我想因为images本身就有子文件夹。有没有办法压缩一条规则来排除:images | js | css | php子文件夹?
RewriteEngine on
RewriteCond %{REQUEST_URI} !globalcss
RewriteCond %{REQUEST_URI} !^/sites/mainsite/css
RewriteRule ^css/(.*)$ /sites/mainsite/css/$1 [L]