Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
# Exclude directories from rewrite rules
RewriteRule ^(css|i|js|storages|assets) - [L]
# For Friendly URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]
server {
listen 80;
include /etc/nginx/mime.types;
default_type application/octet-stream;
location / {
root /var/site;
rewrite ^/index(\.\w+)?$ / permanent; # редирект c index-ов на корень
rewrite ^/(.+)\.\.html /$1.en.html permanent; # добавляем в ".." дефолтный язык
rewrite ^/(.+?)/?$(?<!\.html) $1.html permanent; # добавляем .html, заодно убираем слеш
try_files $uri /test.php?URI=$uri; # если файла нету - нехай его сделает бекенд
}
location ~^/([^/]*\.php)$ { # скармливаем пыху скрипты в докруте, включая фронт контроллер
fastcgi_param SCRIPT_FILENAME /var/site/$fastcgi_script_name;
fastcgi_param QUERY_STRING $args;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}
}
RewriteRule ^(.*)$ $1 [L,QSA]AddDefaultCharset utf8
RewriteEngine on
RewriteBase /
# CSS & JS Versioning Routing
# style.123.css equal to style.css
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.(\d+)\.(js|css)$ $1.$3 [L]
# General Routing
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [L,QSA]
#Expiring
<IfModule mod_expires.c>
ExpiresActive on
# Dynamic
ExpiresByType text/html "access plus 0 seconds"
ExpiresByType text/xml "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType application/json "access plus 0 seconds"
# Images
ExpiresByType image/x-icon "access plus 1 week"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
# Fonts
ExpiresByType application/x-font-ttf "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType application/x-font-woff "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
# JS & CSS because of versioning
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
</IfModule>
#Disable ETag because of Expiring
<IfModule mod_headers.c>
Header unset ETag
</IfModule>
FileETag None
# Disable Indexing of folders
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
Сразу важный момент: выключена автоматическая подстановка слеша в конец и выключен MultiViews (с ним работать не будет).
RewriteCond %{REQUEST_URI} ^/index$ [OR]
RewriteCond %{REQUEST_URI} ^/index[.]+(\w+)$
RewriteRule . / [R=301,L]
Мой вариант .htaccess