将项目移动到子文件夹会混乱我的脚本路径和网址

时间:2015-10-21 14:22:06

标签: php .htaccess codeigniter mod-rewrite fuelcms

我正在我的本地服务器中在根文件夹中开发网站,问题是当我的客户端告诉我将网站上传到他们的服务器时,它位于子文件夹中。所以网址就是这样的。 http://example.com/myproject

这种格式的问题是我的所有css,js,ajax调用都搞砸了,因为当我试图检查Firebug / chrome控制台时,我看到http://example.com/assets/css/main.css,其实它应该是{{} 1}}

我的所有脚本编码都是这样的: http://example.com/myproject/assets/css/main.css因为当项目不在子文件夹中时,它可以正常工作。

现在我的问题是,是否有一个技巧,可能在.htaccess或mod_rewrite中允许我告诉浏览器总是在我的所有脚本调用中添加/ myproject?

原因是我不想更改所有脚本调用并添加<link rel="stylesheet" href="/assets/css/main.css">

这是我.htaccess的样本:

/myproject/...

非常感谢您的帮助!谢谢!

2 个答案:

答案 0 :(得分:1)

如果您不能/不愿意编辑您的站点,则需要编辑站点文档根目录中的.htaccess文件(或服务器配置)。要将对不存在的文件的所有请求重写到项目的子目录:

例如:

w was found in line 1
hello
w was found in line 2
hello world
w was found in line 6
hello
w was found 3 times

对于不在RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/myproject%{REQUEST_URI} -f RewriteRule !^myproject/ /myproject/$0 [L] 子目录中但不存在但在/myproject子目录中存在的文件的所有请求,则在内部将请求重写到/myproject子目录。< / p>

这假设您的(子)站点由文件系统上存在的真实文件组成。

这将使您的项目看起来好像是在文档根目录中托管的。您可以从外部重定向(/myproject) - 但这会导致每个页面触发多个重定向,这是要避免的!

但是,这是否有效取决于您的客户在其网站上托管的其他内容。

我认为最好的解决方案是编辑文件。

更新:由于您的网站有前端控制器(即您通过R=301路由所有不存在文件的请求),因此上述指令不太适用。

但是,如果客户端只是托管一个由文件系统上的真实文件组成的站点,那么这可能会简化为:

index.php

答案 1 :(得分:0)

在基于Unix的文件系统(Web路径所基于的)中,路径开头的/是根级别的绝对路径。

对于网址,这意味着它会直接转到您网站的文档根目录。

您需要删除href属性的开头/

<link rel="stylesheet" href="assets/css/main.css">