From 6d14569ec62bf37cfad34d246f56151cf5a5e7a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Wed, 1 Apr 2026 22:12:32 +0300 Subject: [PATCH] feat: add server configuration templates and custom error/index assets --- config/apache_project.conf.template | 22 +++- config/httpd.conf.template | 22 ++++ config/nginx.conf.template | 13 +++ public/server-assets/404.html | 29 +++++ public/server-assets/500.html | 29 +++++ public/server-assets/footer.html | 7 ++ public/server-assets/header.html | 21 ++++ public/server-assets/icon.svg | 28 +++++ public/server-assets/logo-light.svg | 30 +++++ public/server-assets/logo.svg | 33 ++++++ public/server-assets/style.css | 172 ++++++++++++++++++++++++++++ 11 files changed, 403 insertions(+), 3 deletions(-) create mode 100644 public/server-assets/404.html create mode 100644 public/server-assets/500.html create mode 100644 public/server-assets/footer.html create mode 100644 public/server-assets/header.html create mode 100644 public/server-assets/icon.svg create mode 100644 public/server-assets/logo-light.svg create mode 100644 public/server-assets/logo.svg create mode 100644 public/server-assets/style.css diff --git a/config/apache_project.conf.template b/config/apache_project.conf.template index e37cdc9..f94448c 100644 --- a/config/apache_project.conf.template +++ b/config/apache_project.conf.template @@ -1,10 +1,26 @@ +# 1. PHP-FPM bağlantısını temiz ve stabil bir Proxy bloğu olarak tanımlayın + + ProxySet timeout=600 connectiontimeout=600 + + +# 2. Alias tanımı (Sonunda ASLA eğik çizgi '/' olmamalı) Alias /{{HOST}} "{{PATH}}" + Options Indexes FollowSymLinks AllowOverride All Require all granted - - + + # 3. Windows Path Sorununu Çözen Komut (Sadece bu klasöre özel zorluyoruz) + + ProxyFCGIBackendType GENERIC + + + # 4. Klasör direkt çağrıldığında index.php'yi bulmasını garanti edin + DirectoryIndex index.php index.html + + # 5. PHP Dosyalarını Yönlendirme + SetHandler "proxy:fcgi://127.0.0.1:{{PHP_PORT}}/" - + \ No newline at end of file diff --git a/config/httpd.conf.template b/config/httpd.conf.template index 1063549..ce5b547 100644 --- a/config/httpd.conf.template +++ b/config/httpd.conf.template @@ -91,3 +91,25 @@ Alias /phpmyadmin "{{PHPMYADMIN_DIR}}" # Project configurations {{PROJECTS}} + +# Custom Server Assets (Logos, CSS, Error Pages) +Alias /server-assets "D:/Works/2026/multiphp/public/server-assets" + + Options Indexes FollowSymLinks + AllowOverride None + Require all granted + + +# Error Pages +ErrorDocument 404 /server-assets/404.html +ErrorDocument 500 /server-assets/500.html +ErrorDocument 403 /server-assets/404.html +ErrorDocument 502 /server-assets/500.html +ErrorDocument 503 /server-assets/500.html +ErrorDocument 504 /server-assets/500.html + +# Custom Directory Listing (Index of) +IndexOptions +HTMLTable +IconHeight=16 +IconWidth=16 +SuppressRules +SuppressDescription +NameWidth=* +FoldersFirst +ScanHTMLTitles +CharSet=UTF-8 +IndexStyleSheet "/server-assets/style.css" +HeaderName "/server-assets/header.html" +ReadmeName "/server-assets/footer.html" diff --git a/config/nginx.conf.template b/config/nginx.conf.template index 386a13a..75a5654 100644 --- a/config/nginx.conf.template +++ b/config/nginx.conf.template @@ -36,6 +36,19 @@ http { return 404; } + # Custom Server Assets (Logos, CSS, Error Pages) + location /server-assets/ { + alias "D:/Works/2026/multiphp/public/server-assets/"; + access_log off; + allow all; + } + + # Error Pages + error_page 404 /server-assets/404.html; + error_page 500 502 503 504 /server-assets/500.html; + location = /server-assets/404.html { internal; } + location = /server-assets/500.html { internal; } + {{PROJECTS}} location /phpmyadmin { diff --git a/public/server-assets/404.html b/public/server-assets/404.html new file mode 100644 index 0000000..67b91a5 --- /dev/null +++ b/public/server-assets/404.html @@ -0,0 +1,29 @@ + + + + + + 404 Not Found - Multi-PHP + + + + +
+
+ + + + +
+
404
+
+

Page Not Found

+

The resource you requested could not be found on this server. It might have been moved or doesn't exist.

+ Return to Safety +
+
+ + + diff --git a/public/server-assets/500.html b/public/server-assets/500.html new file mode 100644 index 0000000..598ad7c --- /dev/null +++ b/public/server-assets/500.html @@ -0,0 +1,29 @@ + + + + + + 500 Internal Server Error - Multi-PHP + + + + +
+
+ + + + +
+
500
+
+

Internal Server Error

+

The server encountered an error while processing your request. Please check the logs for more details.

+ Try Again +
+
+ + + diff --git a/public/server-assets/footer.html b/public/server-assets/footer.html new file mode 100644 index 0000000..750cd90 --- /dev/null +++ b/public/server-assets/footer.html @@ -0,0 +1,7 @@ + + + + + diff --git a/public/server-assets/header.html b/public/server-assets/header.html new file mode 100644 index 0000000..1e57241 --- /dev/null +++ b/public/server-assets/header.html @@ -0,0 +1,21 @@ + + + + + + Directory Listing - Multi-PHP + + + + +
+
+ + + + + + +

Index of /

+
+
diff --git a/public/server-assets/icon.svg b/public/server-assets/icon.svg new file mode 100644 index 0000000..581c23c --- /dev/null +++ b/public/server-assets/icon.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + diff --git a/public/server-assets/logo-light.svg b/public/server-assets/logo-light.svg new file mode 100644 index 0000000..3809522 --- /dev/null +++ b/public/server-assets/logo-light.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/server-assets/logo.svg b/public/server-assets/logo.svg new file mode 100644 index 0000000..bedf876 --- /dev/null +++ b/public/server-assets/logo.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/server-assets/style.css b/public/server-assets/style.css new file mode 100644 index 0000000..0dd9a0c --- /dev/null +++ b/public/server-assets/style.css @@ -0,0 +1,172 @@ +:root { + --bg-color: #f8fafc; + --text-color: #1e293b; + --card-bg: #ffffff; + --border-color: #e2e8f0; + --accent-color: #3b82f6; + --hover-bg: #f1f5f9; +} + +@media (prefers-color-scheme: dark) { + :root { + --bg-color: #0f172a; + --text-color: #f1f5f9; + --card-bg: #1e293b; + --border-color: #334155; + --accent-color: #60a5fa; + --hover-bg: #334155; + } +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + background-color: var(--bg-color); + color: var(--text-color); + line-height: 1.5; + display: flex; + flex-direction: column; + min-height: 100vh; +} + +.container { + max-width: 900px; + margin: 2rem auto; + padding: 2rem; + background: var(--card-bg); + border-radius: 1rem; + box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1); + border: 1px solid var(--border-color); +} + +header { + text-align: center; + margin-bottom: 2rem; +} + +header img.logo { + max-width: 250px; + height: auto; + margin-bottom: 1rem; +} + +/* For automatic logo switching in dark mode */ +.logo-light { display: none; } +.logo-dark { display: block; } + +@media (prefers-color-scheme: dark) { + .logo-dark { display: none; } + .logo-light { display: block; } +} + +h1 { + font-size: 1.5rem; + font-weight: 600; + color: var(--text-color); +} + +/* Mod Autoindex Style */ +table { + width: 100%; + border-collapse: collapse; + margin-top: 1rem; +} + +th, td { + padding: 0.75rem 1rem; + text-align: left; + border-bottom: 1px solid var(--border-color); +} + +th { + font-weight: 600; + color: var(--accent-color); + text-transform: uppercase; + font-size: 0.75rem; + letter-spacing: 0.05em; +} + +tr:hover td { + background-color: var(--hover-bg); +} + +a { + color: var(--accent-color); + text-decoration: none; + font-weight: 500; +} + +a:hover { + text-decoration: underline; +} + +.index-icon { + width: 1.25rem; + height: 1.25rem; + margin-right: 0.5rem; + vertical-align: middle; +} + +/* Error Pages Specific */ +.error-container { + text-align: center; + padding: 3rem 1rem; +} + +.error-code { + font-size: 8rem; + font-weight: 900; + color: var(--accent-color); + opacity: 0.2; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + z-index: 0; + pointer-events: none; +} + +.error-content { + position: relative; + z-index: 1; +} + +.error-title { + font-size: 2rem; + margin-bottom: 1rem; +} + +.error-msg { + color: var(--text-color); + opacity: 0.8; + max-width: 500px; + margin: 0 auto 2rem; +} + +.btn { + display: inline-block; + padding: 0.75rem 1.5rem; + background-color: var(--accent-color); + color: white !important; + border-radius: 0.5rem; + font-weight: 600; + transition: transform 0.2s; +} + +.btn:hover { + transform: translateY(-2px); + text-decoration: none; +} + +footer { + margin-top: auto; + padding: 2rem; + text-align: center; + font-size: 0.875rem; + opacity: 0.6; +}