# SoftEdge Corporation - Professional Apache Configuration # Security and Performance Optimizations # Prevent access to sensitive files Order Allow,Deny Deny from all # Prevent access to vendor directory (using FilesMatch instead) Order Allow,Deny Deny from all # Prevent access to logs directory (using FilesMatch instead) Order Allow,Deny Deny from all # Prevent access to .env files Order Allow,Deny Deny from all # Enable URL rewriting RewriteEngine On # Force HTTPS (uncomment when SSL is available) # RewriteCond %{HTTPS} off # RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Remove trailing slash RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [R=301,L] # Handle PHP files without .php extension (optional) # RewriteCond %{REQUEST_FILENAME} !-d # RewriteCond %{REQUEST_FILENAME} !-f # RewriteCond %{REQUEST_FILENAME}.php -f # RewriteRule ^(.*)$ $1.php [L] # Health check endpoint RewriteRule ^health$ health.php [L] # Security headers (additional layer) # Prevent clickjacking Header always set X-Frame-Options DENY # Prevent MIME type sniffing Header always set X-Content-Type-Options nosniff # Enable XSS filtering Header always set X-XSS-Protection "1; mode=block" # Referrer Policy Header always set Referrer-Policy "strict-origin-when-cross-origin" # Content Security Policy Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://unpkg.com https://cdn.tailwindcss.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https:; connect-src 'self'" # HSTS (uncomment when SSL is available) # Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" # Compression AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/json # Browser caching ExpiresActive On ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/svg+xml "access plus 1 month" ExpiresByType text/css "access plus 1 month" ExpiresByType application/pdf "access plus 1 month" ExpiresByType text/javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 1 month" ExpiresByType image/x-icon "access plus 1 year" ExpiresDefault "access plus 2 days" # PHP settings php_value upload_max_filesize 10M php_value post_max_size 10M php_value max_execution_time 300 php_value memory_limit 256M php_flag display_errors Off php_flag log_errors On php_value error_log logs/php_errors.log # Error pages (commented out - files don't exist) # ErrorDocument 404 /404.php # ErrorDocument 403 /403.php # ErrorDocument 500 /500.php # Prevent image hotlinking (optional) # RewriteCond %{HTTP_REFERER} !^$ # RewriteCond %{HTTP_REFERER} !^https?://(www\.)?softedge-corporation\.up\.railway\.app [NC] # RewriteRule \.(gif|jpg|jpeg|png|svg)$ - [F,L]