繁体   English   中英

为什么.htaccess重定向URL路由很好,但是在经过两个级别的访问后却中断了css / js / image链接?

[英]Why does .htaccess redirect URL routing fine but break css/js/image links after two levels deep?

我在网站的子目录中具有以下.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路径吗?

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

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

htaccess规则可以在文件移动或您无法控制html时提供帮助。 例如,我从事一些使用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]

(?:^|/)表示不捕捉?: ,在^开头或斜杠/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM