【问题标题】:htaccess subdirectory as root directoryhtaccess 子目录作为根目录
【发布时间】:2013-10-02 23:22:17
【问题描述】:

我知道这里有一些这样的问题,所以请原谅我无法将它们拼凑在一起 - 我希望仅在有人访问根目录时显示子目录(主站点),而站点的其余部分保持不变正常。

结构是:

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]   

谢谢

【问题讨论】:

  • I would highly recommend you to change it into something like this. 这样您就可以在实时服务器上获得更接近的版本,可以使用别名域并且不会出现上述问题。
  • 感谢@Prix 的提示,但我在多台电脑上运行带有一个 xampp 实例的保管箱。同步的好处超过了我目前遇到的问题。
  • 您不需要多个 XAMP 实例,只需一个实例即可完成,只需将新的虚拟主机添加到 vhosts.confhttpd.conf 文件中,具体取决于它的方式已配置。

标签: .htaccess


【解决方案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”之外的所有内容。这似乎与您的要求完全不符,即“网站的其余部分保持正常”。


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

浏览器看起来是相对于根目录的,因为这就是它所知道的一切。它只知道“我去这里: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的东西

【讨论】:

  • 这行得通(顶部),唯一的问题是我的站点/主站点/css 现在无法正常工作,因为它看起来是相对于根目录,而不是原始位置。我该如何解决这个问题?我也有一个 js 文件夹,我认为它也有同样的问题。
  • @John 都取决于你的链接方式,浏览器不知道服务器上发生了什么,它只是看到 HTML 并发送请求
  • 最后一个重写规则不起作用,但添加此规则:RewriteCond %{REQUEST_URI} !^css/(.*)$。现在我对同一目录中的图像文件夹有同样的问题。我该如何添加它,尝试了同样的事情,添加另一行并将“css”交换为“images”,但没有运气。我认为是因为图像本身就有子文件夹。有没有一种方法可以压缩一个规则来排除:images|js|css|php 子文件夹?
猜你喜欢
  • 1970-01-01
  • 2016-07-05
  • 2011-08-24
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 2014-12-21
  • 1970-01-01
相关资源
最近更新 更多