Почему .htaccess перенаправляет URL-адрес маршрутизации, но разрывает ссылки css / js / image после двух уровней в глубину?

У меня есть следующий файл .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] 

    (?:^|/) Означает не захват ?: , В начале ^ или после косой черты / .