mod_rewrite изменяет типы MIME .css / .js -> html - PullRequest
0 голосов
/ 21 июня 2011

У меня проблема с mod_rewrite, у меня есть файл .htaccess, настроенный в каталоге с именем cms:

Options +FollowSymLinks 
RewriteEngine on

#rewrite rules for edit
RewriteRule ^edit\/(.*) edit.php?page=$1 [QSA,L]

Я хотел бы получить к нему доступ, например, sitename.com/cms/edit/2, но когда я это делаюЯ получаю ошибки:

my errors to do with mime types

Когда я получаю доступ к естественному пути (sitename/css/edit.php?page=2), все работает отлично.

Любая помощь будет оценена.

Ответы [ 4 ]

0 голосов
/ 25 ноября 2015

У меня тоже была эта проблема, и я нашел решение.

Если ваши файлы css / js связаны с относительным путем, RewriteRule также повлияет на них. Чтобы избежать этого, обратитесь к корневому каталогу. Другими словами:

<link type="text/css" rel="stylesheet" href="css/style.css">

становится

<link type="text/css" rel="stylesheet" href="/css/style.css">
0 голосов
/ 09 марта 2013

Я знаю его старый вопрос, но на всякий случай кто-то все равно будет искать ответ. Я просто наблюдаю те же ошибки.

Сделка заключается в следующем: L parameter mod_rewrite будет направлять запрос в указанное вами местоположение, но все вызовы ajax, включая запросы javascript src, будут вести себя так же, как вы в исходном местоположении.

Проверьте заголовки, например, с помощью LiveHeaders в Firefox, и вы увидите, что ваши запросы указывают на неправильные местоположения. Т.е .: если в вашем play.php вы ссылаетесь на javascript вроде

src="myJS.js"

если RewriteRule очков от

[siteroot]/play/some_data_here

до

[siteroot]/play.php?data=some_data_here

вы увидите, что ваш файл play.php попытается включить src="play/myJS.js", чего, конечно, там нет, поэтому он возвращает 404 aka text / html.

В моем случае я «исправил», добавив параметр R, чтобы он перенаправлял на новое место. Обратной стороной этого является то, что адрес в браузере будет меняться. Попробуйте изменить [QSA,L] to [QSA,L,R].

Надеюсь, это поможет.

0 голосов
/ 18 сентября 2015

Хотя это старая проблема, я испытал то же самое, но потом, когда использовал RewriteRules.

Решение для этого оказывается:

RewriteRule ^bower_components/(.*)\.(css) test/bower_components/$1.css [L,T=text/css]
RewriteRule ^bower_components/(.*)\.(js) test/bower_components/$1.js [L,T=application/javascript]

Для принудительного определения типа файлов, которые вы переписываете. Ориентация на css + js и форсирование T = <>

0 голосов
/ 21 июня 2011

Не уверен, что у вас есть опечатка, а как насчет замены:

RewriteRule ^edit\/(.*) edit.php?page=$1 [QSA,L]

На:

RewriteRule ^edit/(.*?)/?$ edit.php?page=$1 [QSA,L]
...