Skip to content

Commit 2aa5f7e

Browse files
committed
refactor: simplified rewrite routes (#3834)
1 parent c9d19c1 commit 2aa5f7e

File tree

5 files changed

+84
-136
lines changed

5 files changed

+84
-136
lines changed

.docker/frankenphp/Caddyfile

Lines changed: 27 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
# Enable compression
1616
encode gzip
1717

18+
# PHP Handler for FrankenPHP
19+
php_server
20+
1821
# Exclude assets from being handled by router
1922
@assets path /admin/assets*
2023
file_server @assets
@@ -30,32 +33,22 @@
3033
rewrite @setup /setup/index.php
3134

3235
# Administration API
33-
route /admin/api/* {
34-
rewrite * /admin/api/index.php
35-
php_server
36-
}
36+
@admin_api path /admin/api/*
37+
rewrite @admin_api /admin/api/index.php
3738

38-
# Administration pages - handle /admin and /admin/ and subpaths
39-
route /admin/* {
40-
uri strip_prefix /admin
41-
rewrite * /admin/index.php
42-
php_server
43-
}
39+
# Redirect /admin to /admin/
40+
@admin_exact path_regexp ^/admin$
41+
redir @admin_exact /admin/ 301
4442

45-
# Exact match for /admin -> treat as /admin/
46-
route /admin {
47-
uri strip_suffix /admin
43+
# Administration pages
44+
handle_path /admin/* {
4845
rewrite * /admin/index.php
49-
php_server
5046
}
5147

52-
# All API routes (catch-all, including v3.0, v3.1, translations, etc.)
53-
@api path /api*
48+
# API routes (all API endpoints)
49+
@api path /api/*
5450
rewrite @api /api/index.php
5551

56-
# PHP Handler für FrankenPHP
57-
php_server
58-
5952
file_server
6053

6154
header {
@@ -82,48 +75,43 @@
8275
# TLS configuration with your certificate files
8376
tls /etc/ssl/cert.pem /etc/ssl/cert-key.pem
8477

85-
# Gleiche Rewrite-Regeln wie für Port 80
78+
# PHP Handler for FrankenPHP
79+
php_server
80+
81+
# Exclude assets from being handled by router
8682
@assets path /admin/assets*
8783
file_server @assets
8884

85+
# Error pages
8986
handle_errors 404 {
9087
rewrite * /404.html
9188
php_server
9289
}
9390

91+
# Setup and update pages
9492
@setup path /setup*
9593
rewrite @setup /setup/index.php
9694

9795
@update path /update*
9896
rewrite @update /update/index.php
9997

10098
# Administration API
101-
route /admin/api/* {
102-
rewrite * /admin/api/index.php
103-
php_server
104-
}
99+
@admin_api path /admin/api/*
100+
rewrite @admin_api /admin/api/index.php
105101

106-
# Administration pages - handle /admin and /admin/ and subpaths
107-
route /admin/* {
108-
uri strip_prefix /admin
109-
rewrite * /admin/index.php
110-
php_server
111-
}
102+
# Redirect /admin to /admin/
103+
@admin_exact path_regexp ^/admin$
104+
redir @admin_exact /admin/ 301
112105

113-
# Exact match for /admin -> treat as /admin/
114-
route /admin {
115-
uri strip_suffix /admin
106+
# Administration pages
107+
handle_path /admin/* {
116108
rewrite * /admin/index.php
117-
php_server
118109
}
119110

120-
# All API routes (catch-all, including v3.0, v3.1, translations, etc.)
121-
@api path /api*
111+
# API routes (all API endpoints)
112+
@api path /api/*
122113
rewrite @api /api/index.php
123114

124-
# PHP Handler für FrankenPHP
125-
php_server
126-
127115
file_server
128116

129117
header {

.docker/nginx/default.conf

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -70,25 +70,20 @@ server {
7070
location @rewriteapp {
7171

7272
# Administration API
73-
rewrite ^/admin/api/(.*)$ /admin/api/index.php last;
73+
rewrite ^/admin/api/ /admin/api/index.php last;
7474

75-
# Administration pages
76-
rewrite ^/admin/(.*)$ /admin/index.php last;
75+
# Administration pages (redirect /admin to /admin/)
76+
rewrite ^/admin$ /admin/ permanent;
77+
rewrite ^/admin/ /admin/index.php last;
7778

78-
# Private APIs
79-
rewrite ^/api/(.*)$ /api/index.php last;
79+
# API routes (all API endpoints)
80+
rewrite ^/api/ /api/index.php last;
8081

81-
# REST API v3.0 and v3.1
82-
rewrite ^api/v3\.[01]/(.*)$ /api/index.php last;
83-
84-
# Setup APIs
85-
rewrite ^/api/setup/(check|backup|update-database)$ /api/index.php last;
86-
87-
# Setup and update pages
88-
rewrite ^/setup/?$ /setup/index.php last;
82+
# Setup pages
83+
rewrite ^/setup/ /setup/index.php last;
8984

9085
# Front controller: route all other requests to index.php (Symfony Router)
91-
rewrite ^ /index.php last;
86+
rewrite ^ /index.php last;
9287
}
9388

9489
location /admin/assets {
@@ -194,25 +189,20 @@ server {
194189
location @rewriteapp {
195190

196191
# Administration API
197-
rewrite ^/admin/api/(.*)$ /admin/api/index.php last;
198-
199-
# Administration pages
200-
rewrite ^/admin/(.*)$ /admin/index.php last;
201-
202-
# Private APIs
203-
rewrite ^/api/(.*)$ /api/index.php last;
192+
rewrite ^/admin/api/ /admin/api/index.php last;
204193

205-
# REST API v3.0 and v3.1
206-
rewrite ^api/v3\.[01]/(.*)$ /api/index.php last;
194+
# Administration pages (redirect /admin to /admin/)
195+
rewrite ^/admin$ /admin/ permanent;
196+
rewrite ^/admin/ /admin/index.php last;
207197

208-
# Setup APIs
209-
rewrite ^/api/setup/(check|backup|update-database)$ /api/index.php last;
198+
# API routes (all API endpoints)
199+
rewrite ^/api/ /api/index.php last;
210200

211-
# Setup and update pages
212-
rewrite ^/setup/?$ /setup/index.php last;
201+
# Setup pages
202+
rewrite ^/setup/ /setup/index.php last;
213203

214204
# Front controller: route all other requests to index.php (Symfony Router)
215-
rewrite ^ /index.php last;
205+
rewrite ^ /index.php last;
216206
}
217207

218208
location /admin/assets {

nginx.conf

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,8 @@ server {
7070
add_header X-Frame-Options SAMEORIGIN;
7171

7272
# Error pages
73-
error_page 403 = @error403;
7473
error_page 404 = @error404;
7574

76-
location @error403 {
77-
rewrite ^ /index.php?action=403 last;
78-
}
79-
8075
location @error404 {
8176
rewrite ^ /404.html last;
8277
}
@@ -89,25 +84,20 @@ server {
8984
location @rewriteapp {
9085

9186
# Administration API
92-
rewrite ^/admin/api/(.*)$ /admin/api/index.php last;
93-
94-
# Administration pages
95-
rewrite ^/admin/(.*)$ /admin/index.php last;
96-
97-
# REST API v3.0 and v3.1
98-
rewrite ^/api/v3\.[01]/(.*)$ /api/index.php last;
87+
rewrite ^/admin/api/ /admin/api/index.php last;
9988

100-
# Private APIs
101-
rewrite ^/api/(.*)$ /api/index.php last;
89+
# Administration pages (redirect /admin to /admin/)
90+
rewrite ^/admin$ /admin/ permanent;
91+
rewrite ^/admin/ /admin/index.php last;
10292

103-
# Setup APIs
104-
rewrite ^/api/setup/(check|backup|update-database)$ /api/index.php last;
93+
# API routes (all API endpoints)
94+
rewrite ^/api/ /api/index.php last;
10595

106-
# Setup and update pages
107-
rewrite ^/setup/?$ /setup/index.php last;
96+
# Setup pages
97+
rewrite ^/setup/ /setup/index.php last;
10898

10999
# Front controller: route all other requests to index.php (Symfony Router)
110-
rewrite ^ /index.php last;
100+
rewrite ^ /index.php last;
111101
}
112102

113103
location /admin/assets {

phpmyfaq/.htaccess

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -100,30 +100,28 @@ Header set Access-Control-Allow-Headers "Content-Type, Authorization"
100100
RewriteBase /
101101
# Block zip files in content directory
102102
RewriteRule ^content/.*\.zip$ - [F,L]
103+
103104
# Exclude assets from being handled by Symfony Router
104-
RewriteRule ^(admin/assets)($|/) - [L]
105+
RewriteRule ^admin/assets($|/) - [L]
106+
105107
# Error pages
106108
ErrorDocument 404 /404.html
109+
107110
# Administration API
108-
RewriteRule ^admin/api/(.*) admin/api/index.php [L,QSA]
109-
# Administration pages
110-
RewriteRule ^admin/(.*) admin/index.php [L,QSA]
111-
# Private APIs
112-
RewriteCond %{REQUEST_URI} !index\.php$
113-
RewriteRule ^api/(autocomplete|bookmark/delete|bookmark/create|user/data/update|user/password/update|user/request-removal|user/remove-twofactor|contact|voting|register|captcha|share|comment/create|faq/create|question/create|webauthn/prepare|webauthn/register|webauthn/prepare-login|webauthn/login|translations) api/index.php [L,QSA]
114-
# Setup APIs
115-
RewriteCond %{REQUEST_URI} !index\.php$
116-
RewriteRule ^api/setup/(check|backup|update-database) api/index.php [L,QSA]
117-
# REST API v3.0 and v3.1
118-
# * http://[...]/api/v3.x/<ACTION>
119-
RewriteCond %{REQUEST_URI} !index\.php$
120-
RewriteRule ^api/v3\.[01]/(.*) api/index.php [L,QSA]
121-
# Setup and update pages
122-
RewriteCond %{REQUEST_URI} ^(.*/)setup/
123-
RewriteCond %{REQUEST_URI} !index\.php$
124-
RewriteRule ^(.*/)?setup/(.*) $1setup/index.php [L,QSA]
111+
RewriteRule ^admin/api/ admin/api/index.php [L,QSA]
112+
113+
# Administration pages (redirect /admin to /admin/)
114+
RewriteRule ^admin$ admin/ [R=301,L]
115+
RewriteRule ^admin/ admin/index.php [L,QSA]
116+
117+
# API routes (all API endpoints)
118+
RewriteRule ^api/ api/index.php [L,QSA]
119+
120+
# Setup pages
121+
RewriteRule ^setup/ setup/index.php [L,QSA]
125122
RewriteRule ^update$ update/ [R=301,L]
126-
# Front controller: route all requests to index.php (Symfony Router)
123+
124+
# Front controller: route all other requests to index.php (Symfony Router)
127125
# Skip if the file or directory exists
128126
RewriteCond %{REQUEST_FILENAME} !-f
129127
RewriteCond %{REQUEST_FILENAME} !-d

phpmyfaq/web.config

Lines changed: 13 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -63,50 +63,32 @@
6363

6464
<!-- Administration API -->
6565
<rule name="Admin API" stopProcessing="true">
66-
<match url="^admin/api/(.*)" />
66+
<match url="^admin/api/" />
6767
<action type="Rewrite" url="admin/api/index.php" appendQueryString="true" />
6868
</rule>
6969

70+
<!-- Redirect /admin to /admin/ -->
71+
<rule name="Redirect Admin" stopProcessing="true">
72+
<match url="^admin$" />
73+
<action type="Redirect" url="admin/" redirectType="Permanent" />
74+
</rule>
75+
7076
<!-- Administration pages -->
7177
<rule name="Admin Pages" stopProcessing="true">
72-
<match url="^admin/(.*)" />
78+
<match url="^admin/" />
7379
<action type="Rewrite" url="admin/index.php" appendQueryString="true" />
7480
</rule>
7581

76-
<!-- Private APIs -->
77-
<rule name="Private APIs" stopProcessing="true">
78-
<match url="^api/(autocomplete|bookmark/delete|bookmark/create|user/data/update|user/password/update|user/request-removal|user/remove-twofactor|contact|voting|register|captcha|share|comment/create|faq/create|question/create|webauthn/prepare|webauthn/register|webauthn/prepare-login|webauthn/login|translations)$" />
79-
<conditions>
80-
<add input="{REQUEST_URI}" pattern="index\.php$" negate="true" />
81-
</conditions>
82-
<action type="Rewrite" url="api/index.php" appendQueryString="true" />
83-
</rule>
84-
85-
<!-- Setup APIs -->
86-
<rule name="Setup APIs" stopProcessing="true">
87-
<match url="^api/setup/(check|backup|update-database)$" />
88-
<conditions>
89-
<add input="{REQUEST_URI}" pattern="index\.php$" negate="true" />
90-
</conditions>
91-
<action type="Rewrite" url="api/index.php" appendQueryString="true" />
92-
</rule>
93-
94-
<!-- REST API v3.0 and v3.1 -->
95-
<rule name="REST API v3" stopProcessing="true">
96-
<match url="^api/v3\.[01]/(.*)" />
97-
<conditions>
98-
<add input="{REQUEST_URI}" pattern="index\.php$" negate="true" />
99-
</conditions>
82+
<!-- API routes (all API endpoints) -->
83+
<rule name="API Routes" stopProcessing="true">
84+
<match url="^api/" />
10085
<action type="Rewrite" url="api/index.php" appendQueryString="true" />
10186
</rule>
10287

10388
<!-- Setup pages -->
10489
<rule name="Setup Pages" stopProcessing="true">
105-
<match url="^(.*/)?setup/(.*)" />
106-
<conditions>
107-
<add input="{REQUEST_URI}" pattern="index\.php$" negate="true" />
108-
</conditions>
109-
<action type="Rewrite" url="{R:1}setup/index.php" appendQueryString="true" />
90+
<match url="^setup/" />
91+
<action type="Rewrite" url="setup/index.php" appendQueryString="true" />
11092
</rule>
11193

11294
<!-- Front controller: route all requests to index.php (Symfony Router) -->

0 commit comments

Comments
 (0)