Как заставить LiteSpeed ​​оценить все правила перезаписи в .htaccess, как это делает apache2? - PullRequest
1 голос
/ 10 июня 2011

У меня проблемы с LiteSpeed, который не оценивает правила mod_rewrite так же, как apache2

У меня есть система маршрутизации php с настройкой mod_rewrite, которая переписывает http://example.com/page-name в http://example.com/index.php/page-name с помощью $ _SERVER ['REQUEST_URI']. Это отлично работает.

Я добавил URI для создания миниатюр из URI изображения с именем ex http://example.com/generate-thumbnail?uri=/images/thumbnails/1.jpg.. Этот URL создает миниатюру изображения, которая сохраняется в http://example.com/images/thumbnail/1.jpg для включения кэширования.

Следующим шагом является регулярное выражение, которое проверяет, выполняется ли изображение на http://example.com/images/thumbnail/1.jpg и, если нет, запускается http://example.com/generate-thumbnail?uri=/images/thumbnails/1.jpg для создания нового эскиза.

Файл .htaccess, приведенный ниже, прекрасно работает в apache2, но не работает на моем хостинге, который запускает LiteSpeed. На LiteSpeed ​​оцениваются только первые правила перезаписи, так что если http://example.com/generate-thumbnail?uri=/images/thumbnails/1.jpg не существует, сервер, похоже, ищет файл http://example.com/generate-thumbnail вместо оценки последних правил перезаписи, которые приведут к правильному URL http://example.com/index.php/generate-thumbnail?uri=/images/thumbnails/1.jpg.

apache2 понял это правильно, но не LiteSpeed, почему?

Если я изменю RewriteRule (.*) /generate-thumbnail?uri=$1 [L] на RewriteRule (.*) /file_that_exists.php?uri=$1 [L], где file_that_exists.php - настоящий файл, в LiteSpeed ​​все работает нормально.

Как мне получить LiteSpeed ​​для оценки всех правил перезаписи?

# Start the rewrite engine
RewriteEngine On

# Rewrite if post image was requested but is not cached, generate it
RewriteCond %{REQUEST_URI} ^/images/thumbnails/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /generate-thumbnail?uri=$1 [L]

# Rewrite the page into the router
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

1 Ответ

1 голос
/ 10 июня 2011

mod_rewrite также должен останавливаться на правиле /generate-thumbnail из-за флага [LAST]. Удалите это [L], если вы действительно хотите, чтобы правило index.php/ также применялось.

Поскольку LiteSpeed ​​заявляет о совместимости с Apache, я бы предположил, что это коммерческий форк. Если это так, я не понимаю, как это может отвлечь здесь. Но в любом случае, включите RewriteLog, чтобы найти причину.

...