правило htaccess нарушает css / js

#javascript #css #.htaccess #rewrite

#javascript #css #.htaccess #переписать

Вопрос:

Я создал простое правило htaccess для перезаписи /jobs/24 в index.php?job=23

Но по какой-то причине это, похоже, нарушает весь мой веб-сайт, ни одно из моих правил css или файлов js больше не применяется.

Что может вызвать эту проблему?

Я много искал, пробуя разные решения, но, похоже, ничего не работает

Комментарии:

1. Не могли бы вы также опубликовать код.

2. Не могли бы вы предоставить нам точные правила перезаписи, которые вы используете?

3. Мой плохой, извините, это правило, которое я использовал Options FollowSymLinks RewriteEngine на RewriteRule ^jobs/([^/] ) index.php?job=$ 1 [NC]

Ответ №1:

В вашем правиле перезаписи нет ничего плохого. Вероятно, вы просто неправильно адресуете свои файлы css / js.

Позвольте мне попытаться пояснить, что я имею в виду, на примере. Допустим, ваша структура каталогов выглядит следующим образом:

 - index.php
- .htaccess
- js/
    - default.js
  

Теперь вы включаете этот файл JS в свой index.php

 <script type="text/javascript" src="js/default.js"></script>
  

Это сработает, если вы вызовете index.php напрямую — но если вы позвоните jobs/24 и перепишете это на index.php , этого не произойдет. Перезапись — это не перенаправление! Клиент не знает об этом и все еще думает, что запрошенный файл находится в каталоге jobs . Это означает, что браузер будет искать default.js в следующем месте: /jobs/js/default.js

Вы можете использовать абсолютные пути, чтобы избежать таких проблем:

 <script type="text/javascript" src="/js/default.js"></script>
  

Комментарии:

1. Это не очень помогло. Кроме того, я обнаружил, что использование полного URL-адреса для файлов помогло

Ответ №2:

Скорее всего, ваши файлы больше не могут быть найдены, потому что все переписывается. Вы можете добавить исключения для нужных вам файлов или исключить весь каталог.

Чтобы исключить весь каталог, просто создайте следующий .htaccess файл в этой папке:

 rewriteEngine off
  

Чтобы исключить определенные пути, поместите это выше вашего исходного .htaccess :

 RewriteRule ^(dir1¦dir2¦dir3) - [L]
  

Вы можете проверить это с помощью Firebug, например, вкладка net показывает вам любой файл, который не удалось загрузить.

Ответ №3:

Правила перезаписи также применяются к URL-адресам css и javascript. Взгляните на них и посмотрите, соответствуют ли они шаблону в вашем правиле перезаписи. Если это так, исключите их, используя условие перезаписи. Подробности см. В документации.