mod_rewrite новичок - это правильно? - PullRequest
0 голосов
/ 19 июля 2011

Предполагается, что любой uri отправляется как часть строки запроса в скрипт, который его обрабатывает.

RewriteEngine On
RewriteCond %{REQUEST_URI} !(css.php|gif|jpe?g|png|css|js|json|xml|ico)$
RewriteRule ^(.*)(/)?$ index.php?where=$1 [QSA,L]

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

1 Ответ

1 голос
/ 20 июля 2011

BTH Я бы немного изменил это правило:

RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(css.php|gif|jpe?g|png|css|js|json|xml|ico)$
RewriteRule ^(.*)/?$ index.php?where=$1 [QSA,L]
  1. Добавлен \. в шаблон RewriteCond, чтобы гарантировать, что он работает только для файлов с такими расширениями (в противном случае шаблон также будет соответствовать файлам, которые имеют этот текст в конце, например /something/mygif <> /something/my.gif).

  2. Заменено (/) на / в шаблоне RewriteRule - это не имеет никакого значения в функциональности, но немного меньше по ресурсам.


Вернуться к основной теме:

  • Если он "игнорирует все это так, как будто перезапись URL отключена" , то, скорее всего, файлы .htaccess не поддерживаются / не разрешаются (или они должны иметь другое имя в соответствии с настройкой Директива AccessFileName : например, AccessFileName ht.access).

    Чтобы проверить это, попробуйте поместить другие директивы в .htaccess и посмотреть, работает ли он (например: ErrorDocument 404 /404.php или DirectoryIndex index.php и т. Д.).

  • Если он "сообщает о неверном запросе всякий раз, когда загружается .htaccess с вышеуказанным содержимым" , то, скорее всего, эти директивы не могут быть помещены в .htaccess (требуется AllowOverride All или в минимум AllowOverride FileInfo; см. документы ) или mod_rewrite не включен.

    Проверьте журнал ошибок Apache - в нем должны быть записи, упоминающие этот момент.

...