Я использую сервер apache2, работающий на debian, который перенаправляет весь HTTP-запрос на tomcat, установленный на том же компьютере.
У меня есть два файла в папке / etc / apache2 /
apache2.conf и httpd.conf
Я изменил файл httpd.conf, чтобы он выглядел следующим образом.
# forward all http request on port 80 to tomcat ProxyPass / ajp://127.0.0.1:8009/ ProxyPassReverse / ajp://127.0.0.1:8009/ # gzip text content AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript DeflateCompressionLevel 9 BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Turn on Expires and mark all static content to expire in a week # unset last modified and ETag ExpiresActive On ExpiresDefault A0 <FilesMatch "\.(jpg|jpeg|png|gif|js|css|ico)$"> ExpiresDefault A604800 Header unset Last-Modified Header unset ETag FileETag None Header append Cache-Control "max-age=604800, public" </FilesMatch> RewriteEngine On # rewrite all www.example.com/content/XXX-01.js and YYY-01.css files to XXX.js and YYY.css RewriteRule ^content/(js|css)/([a-z]+)-([0-9]+)\.(js|css)$ /content/$1/$2.$4 # remove all query parameters from URL after we are done with it RewriteCond %{THE_REQUEST} ^GET\ /.*\;.*\ HTTP/ RewriteCond %{QUERY_STRING} !^$ RewriteRule .* http://example.com%{REQUEST_URI}? [R=301,L] # rewrite all www.example.com to example.com RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
Хочу добиться следующего.
Проблема только 1 и 2 работают. Я много пробовал со многими комбинациями, но правило истечения срока действия и перезаписи (3-6) вообще не работает. Я также попытался перенести эти правила в файлы apache2.conf и .htaccess, но это тоже не сработало. Это не дает никаких ошибок, но эти правила просто игнорируются.
истекает, и модули перезаписи ВКЛЮЧЕНЫ.
Пожалуйста, дайте мне знать, что мне делать, чтобы это исправить. 1. Нужно ли мне добавить что-то еще в файл httpd.conf (например, Options + FollowSymLink) или что-то еще? 2. Нужно ли что-то добавить в файл apache2.conf? 3. Нужно ли переносить эти правила в файл .htaccess? Если да, что мне писать в этом файле и где мне хранить этот файл? в папке / etc / apache2 / или в папке / var / www /? 4. Есть ли еще информация для работы?
Спасибо, Анкит
Наверное, ProxyPass /
Директива, которая есть в вашей конфигурации, направляет все запросы в серверную часть Tomcat, минуя все ваши директивы mod_rewrite. Вы можете попробовать удалить ProxyPass
директива и использование RewriteRule
с [P]
флаг после других ваших перезаписей:
Для заголовков expire ситуация еще хуже - в еще один похожий вопрос решение не найдено.
Option +FollowSymLinks
потребуется для использования mod_rewrite в .htaccess
файлы; в вашем случае это не требуется, потому что вы можете поместить все в конфигурацию Apache. Перенос правил из конфигурации в .htaccess
бессмысленно и может только замедлить работу. Однако есть важное различие между .htaccess
и конфиг Apache - в .htaccess
шаблоны в RewriteRule
сопоставляются с относительными путями файловой системы (которые никогда не начинаются с /
), а в VirtualHost
контексте эти шаблоны сопоставляются с URL-путем после имени хоста, который всегда начинается с /
. Следовательно, по крайней мере одно из ваших правил неверно:
RewriteRule ^content/(js|css)/([a-z]+)-([0-9]+)\.(js|css)$ /content/$1/$2.$4
должно быть
RewriteRule ^/content/(js|css)/([a-z]+)-([0-9]+)\.(js|css)$ /content/$1/$2.$4
(обратите внимание на дополнительную косую черту в начале).
imo вы должны изменить правила следующим образом:
#is the path correct? your comment stats something else
RewriteRule ^/content/(js|css)/([a-z]+)-([0-9]+)\.(js|css) /content/$1/$2.$4
# rewrite all www.example.com to example.com
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^/(.*) http://example.com/$1 [R=301,L]
чтобы получить больше информации, взгляните на этот директива и следующее. после включения ведения журнала попробуйте все это еще раз и посмотрите журналы.
Вы проверили, совпадают ли регистр вашего регулярного выражения и регистр ваших файлов?