# 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]