У меня есть следующий файл .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]
(?:^|/)
Означает не захват ?:
, В начале ^
или после косой черты /
.