2

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

这种格式的问题是我所有的 css、js、ajax 调用都搞砸了,因为当我尝试检查 Firebug/chrome 控制台时,我看到一个http://example.com/assets/css/main.css,实际上它应该在哪里http://example.com/myproject/assets/css/main.css

我所有的脚本都被编码成这样: <link rel="stylesheet" href="/assets/css/main.css">因为当项目不在子文件夹中时,它可以完美地工作。

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

这样做的原因是我不想更改所有脚本调用并添加一个/myproject/...

这是我的 .htaccess 示例:

Options +FollowSymLinks

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    <Files .*>
        Order Deny,Allow
        Deny From All
    </Files>

    # Allow asset folders through
    RewriteRule ^(fuel/modules/(.+)?/assets/(.+)) - [L]

    # Protect application and system files from being viewed
    RewriteRule ^(fuel/install/.+|fuel/crons/.+|fuel/data_backup/.+|fuel/codeigniter/.+|fuel/modules/.+|fuel/application/.+) - [F,L]


    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule .* index.php/$0 [L]

    # Prevents access to dot files (.git, .htaccess) - security.
    RewriteCond %{SCRIPT_FILENAME} -d
    RewriteCond %{SCRIPT_FILENAME} -f
    RewriteRule "(^|/)\." - [F]

</IfModule>
Options -Indexes

对你的帮助表示感谢!谢谢!

4

2 回答 2

1

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

例如,类似:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/myproject%{REQUEST_URI} -f
RewriteRule !^myproject/ /myproject/$0 [L]

对于不在子目录中的文件的所有请求,这些文件不/myproject存在,但确实存在于/myproject子目录中,然后在内部将请求重写到/myproject子目录。

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

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

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

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

更新:由于您的站点有一个前端控制器(即您正在通过 路由对不存在文件的所有请求index.php),因此上述指令将无法正常工作。

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !^myproject/ /myproject/$0 [L]
于 2015-10-21T15:15:08.770 回答
0

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

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

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

<link rel="stylesheet" href="assets/css/main.css">
于 2015-10-21T14:59:08.190 回答