1

我在站点的子目录中有以下.htaccess文件:

RewriteEngine On

RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?params=$1 [L,QSA]

我有以下index.php文件:

<html>
    <head>
        <link href="css/main.css" rel="stylesheet"/>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script src="js/main.js"></script>
    </head>
    <body>
        <p>if css loads, this should be green</p>
        <p id="message">javascript is NOT loaded</p>
        <div>If images are displaying correctly, then there should be a green square below:</div>
        <img src="images/test.jpg"/>
        <div style="margin: 10px 0 0 0;font-weight: bold;background-color:#eee"><?php echo '$_SERVER["REQUEST_URI"] = '. $_SERVER["REQUEST_URI"]; ?></div>
    </body>
</html>

所有 URL 都正确重定向到 index.php。但是,如果 URL 比子目录路径深一层以上,那么我的 css/js/images 路径就会损坏:

在此处输入图像描述

我必须对 .htaccess 文件进行哪些更改,以使路由在任何级别都有效并且不会破坏我的 css/js/image 路径?

4

1 回答 1

1

从绝对 URL 建议中,如果文件始终位于域的根目录,并且您可以控制 html,则可以使用前导斜杠绝对,这可能避免在服务器之间编辑它们。

/css/main.css
/js/main.js
/images/test.jpg

如果文件移动,或者您无法控制 html,htaccess 规则会有所帮助。例如,我从事一些使用 Dreamweaver 的项目,该项目喜欢做 ../images/test.jpg。

RewriteRule (css|js|images)/(.+)$ /$1/$2 [NC,QSA,L]

这假定文件实际上位于域的根目录。如果这在服务器之间有所不同,那么您需要在 htaccess 中编辑路径——但这仍然比编辑 html 更容易。

这里假设所有的样式、脚本和图片都在 css、js、images 三个文件夹中;这些是唯一具有这些名称的文件夹。例如,其他子文件夹中不能有其他图像文件夹。

这将破坏以这些字符串结尾的任何文件夹,例如 myimages 或 somecss。这可以通过调整规则以要求它们独立来避免。然后这些文件夹不会改变,只有特定的 css、js 和 images 文件夹。

RewriteRule (?:^|/)(css|js|images)/(.+)$ /$1/$2 [NC,QSA,L]

(?:^|/)表示非捕获,在?:开头^或斜线之后/

于 2013-07-29T15:40:25.363 回答