![](/img/trans.png)
[英]can not load css and js after htaccess redirect url in php
[英]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.