Mod_rewrite переписывает вещи, которым явно сказано не - PullRequest
1 голос
/ 09 июля 2009

В моем .htaccess есть следующие изменения:

Options +FollowSymLinks 
RewriteEngine On
RewriteRule \.(css|jpe?g|gif|png)$ - [L]
RewriteRule ^index/error/([^/\.]+)/?$ index.php?error=$1 [L]

Как вы можете сказать, он не должен переписывать файлы .css / .jpg / .jpeg / .gif / .png. Несмотря на это, он делает это. Что действительно странно, так это то, что строка под ней, та, которая перенаправляет / index / error / что угодно на index.php? Error = $ 1, работает отлично. Что-то не так с моим регулярным выражением? Есть ли лучший способ сделать это?

ТИА.

РЕДАКТИРОВАТЬ после многих попыток исправить проблему позже:

Я действительно нашел другой, на мой взгляд, более элегантный, конечно более простой способ сделать это. Моя проблема заключалась в том, что мой файл содержал указатель на мой CSS-файл как href = "./ css / styles.css". Файл styles.css никогда не будет перемещаться. Поэтому я просто изменил элемент href на абсолютный URI (http://www.mysite.com/css/styles.css) вместо относительного URI. Проблема решена! Спасибо всем, кто написал за помощь.

Ответы [ 3 ]

2 голосов
/ 09 июля 2009

Вы можете использовать RewriteCond, чтобы избежать применения правил к этому набору расширений, например

Options +FollowSymLinks 
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(css|jpe?g|gif|png)$
RewriteRule ^index/error/([^/\.]+)/?$ index.php?error=$1 [L]

Кроме того, вы не упоминаете, какие запросы не выполняются и каким образом, было бы неплохо знать, если этого недостаточно для решения вашей проблемы (что вполне вероятно).

1 голос
/ 09 июля 2009

Последнее правило не очень полезно в .htaccess при изменении URL - см. mod_rewrite tech . Там вы увидите, что это происходит потому, что перезапись происходит поздно при обработке запроса, поэтому она знает каталог, но тогда уже слишком поздно переписывать URL. Он решает эту проблему, создавая новый запрос, и этот новый запрос обрабатывается снова по тем же правилам, фактически отменяя флаг «последний».

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

    You can debug mod_rewriting adding those two directives in httpd.conf:
    RewriteLogLevel 9
    RewriteLog "<path-to-log-file"

Регулярное выражение выглядит хорошо для меня, и я видел почти то же самое в примере mod_rewrite .

0 голосов
/ 09 июля 2009

Я действительно нашел другой, на мой взгляд, более элегантный, конечно более простой способ сделать это. Моя проблема заключалась в том, что мой файл содержал указатель на мой CSS-файл как href = "./ css / styles.css". Файл styles.css никогда не будет перемещаться. Поэтому я просто изменил элемент href на абсолютный URI (http://www.mysite.com/css/styles.css) вместо относительного URI. Проблема решена! Спасибо всем, кто написал за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...