dbxapp 4.1.3
CMS, Shop, Workflows und modulare Geschäftsanwendungen
Loading...
Searching...
No Matches
dbxSeoCanonicalPolicy_test.php
Go to the documentation of this file.
1<?php
2
3declare(strict_types=1);
4
5$_SERVER['HTTPS'] = 'on';
6$_SERVER['HTTP_HOST'] = 'localhost';
7$_SERVER['SERVER_PORT'] = '443';
8$_SERVER['SCRIPT_NAME'] = '/dbxapp/index.php';
9$_SERVER['PHP_SELF'] = '/dbxapp/index.php';
10$_SERVER['REQUEST_METHOD'] = 'GET';
11$_SERVER['REQUEST_URI'] = '/dbxapp/';
12
13require_once dirname(__DIR__, 2) . '/vendor/autoload.php';
14require_once dirname(__DIR__) . '/dbxKernel.php';
15require_once dirname(__DIR__) . '/dbxTPL.class.php';
16require_once dirname(__DIR__, 2) . '/modules/dbxContent/include/dbxContentRenderer.class.php';
17
18function seoFail(string $message, int $code): void {
19 fwrite(STDERR, "FAIL: $message\n");
20 exit($code);
21}
22
23$base = 'https://localhost/dbxapp/';
24dbx()->set_system_var('dbx_base_url', $base);
25$web = dbx()->get_system_obj('dbxWebApp');
26
27dbx()->set_system_var('dbx_permalink', 'home');
28$_GET = array();
29$_POST = array();
30if ($web->canonical_home_redirect_target() !== $base) {
31 seoFail('Der Startseitenalias home wird nicht auf die Basis-URL normalisiert.', 1);
32}
33
34$_SERVER['REQUEST_METHOD'] = 'POST';
35if ($web->canonical_home_redirect_target() !== '') {
36 seoFail('Schreibende Requests duerfen keinen Startseiten-Redirect erhalten.', 2);
37}
38
39$_SERVER['REQUEST_METHOD'] = 'GET';
40$_GET = array('dbx_modul' => 'dbxContent', 'dbx_run1' => 'run');
41if ($web->canonical_home_redirect_target() !== '') {
42 seoFail('Eine explizite Modulroute darf nicht als Startseitenalias umgedeutet werden.', 3);
43}
44
45$_GET = array('dbx_design' => 'steal');
46if ($web->canonical_home_redirect_target() !== $base) {
47 seoFail('Eine reine Darstellungsvariante muss auf die saubere Startseite fuehren.', 4);
48}
49
50dbx()->set_system_var('dbx_permalink', 'produkte');
51$_GET = array();
52if ($web->canonical_home_redirect_target() !== '') {
53 seoFail('Ein normaler Content-Permalink darf nicht umgeleitet werden.', 5);
54}
55
56dbx()->set_system_var('dbx_lng', 'de');
57dbx()->set_system_var('dbx_permalink', 'info-cms');
58if ($web->content_permalink_redirect_target() !== $base . 'cms-website') {
59 seoFail('Die deutsche Content-Weiterleitung wurde nicht erkannt.', 6);
60}
61
62dbx()->set_system_var('dbx_lng', 'en');
63if ($web->content_permalink_redirect_target() !== '') {
64 seoFail('Deutsche Content-Weiterleitungen dürfen andere Sprachen nicht verändern.', 7);
65}
66
67dbx()->set_system_var('dbx_lng', 'de');
68$_GET = array('dbx_modul' => 'dbxContent');
69if ($web->content_permalink_redirect_target() !== '') {
70 seoFail('Explizite Modulrouten dürfen keine Content-Weiterleitung auslösen.', 8);
71}
72
73$tpl = new dbxTPL();
74$robotsMethod = new ReflectionMethod(dbxTPL::class, 'effective_robots_meta');
75$robotsMethod->setAccessible(true);
76dbx()->set_system_var('dbx_robots', 'index,follow');
77
78$_GET = array('dbx_modul' => 'dbxContent');
79if ($robotsMethod->invoke($tpl) !== 'noindex,follow') {
80 seoFail('Technische Routen muessen Content-SEO mit noindex,follow ueberstimmen.', 9);
81}
82
83$_GET = array('dbx_edit' => '1');
84if ($robotsMethod->invoke($tpl) !== 'noindex,follow') {
85 seoFail('Bearbeitungsrouten muessen noindex,follow erhalten.', 10);
86}
87
88$_GET = array('dbx_do' => 'delete');
89if ($robotsMethod->invoke($tpl) !== 'noindex,follow') {
90 seoFail('Aktionsrouten muessen noindex,follow erhalten.', 11);
91}
92
93$_GET = array();
94if ($robotsMethod->invoke($tpl) !== 'index,follow') {
95 seoFail('Saubere Content-Routen muessen ihren konfigurierten Robots-Wert behalten.', 12);
96}
97
98$renderer = new \dbx\dbxContent\dbxContentRenderer();
99$canonicalMethod = new ReflectionMethod($renderer, 'seoCanonicalUrl');
100$canonicalMethod->setAccessible(true);
101if ($canonicalMethod->invoke($renderer, 'home', true) !== $base) {
102 seoFail('Die konfigurierte Startseite muss die Basis-URL als Canonical erhalten.', 13);
103}
104if ($canonicalMethod->invoke($renderer, 'produkte', false) !== $base . 'produkte') {
105 seoFail('Normale Inhaltsseiten muessen einen selbstreferenziellen Canonical erhalten.', 14);
106}
107
108$root = dirname(__DIR__, 2);
109$sitemapSource = (string)file_get_contents(
110 $root . '/modules/dbxContent/include/dbxContentSitemap.class.php'
111);
112if (strpos($sitemapSource, 'collectUserMenuLinks') !== false
113 || strpos($sitemapSource, 'dbxContentHome::masterCid') === false
114 || strpos($sitemapSource, 'isNoindex') === false
115 || strpos($sitemapSource, '$lngs = array($masterLng)') === false) {
116 seoFail('Die Sitemap-Regel fuer reine Content-URLs und die Startseite fehlt.', 15);
117}
118
119$htaccess = (string)file_get_contents(dirname($root) . '/.htaccess');
120if (!preg_match('/RewriteRule \\^home\\/\\?\\$ https:\\/\\/dbxapp\\.de\\//', $htaccess)
121 || strpos($htaccess, '%{HTTPS} !=on') === false) {
122 seoFail('Die produktive Redirect-Regel fuer /home beziehungsweise HTTPS fehlt.', 16);
123}
124
125$designDir = $root . '/design';
126$iterator = new RecursiveIteratorIterator(
127 new RecursiveDirectoryIterator($designDir, FilesystemIterator::SKIP_DOTS)
128);
129foreach ($iterator as $file) {
130 if (!$file->isFile() || strtolower($file->getExtension()) !== 'htm') {
131 continue;
132 }
133 $html = (string)file_get_contents($file->getPathname());
134 if (stripos($html, '<head') === false) {
135 continue;
136 }
137 if (substr_count($html, '{dbx:head_meta}') !== 1) {
138 seoFail('Design-HTML ohne genau einen zentralen Head-Metablock: ' . $file->getPathname(), 17);
139 }
140 if (preg_match("/<link\\b[^>]*rel=[\"']canonical[\"']/i", $html)) {
141 seoFail('Canonical darf im Design nicht fest verdrahtet sein: ' . $file->getPathname(), 18);
142 }
143}
144
145echo "OK dbx SEO canonical policy\n";
$_SERVER['REQUEST_METHOD']
if($web->content_permalink_redirect_target() !=='') $tpl
if(!preg_match('/RewriteRule \\^home\\/\\?\\$ https:\\/\\/dbxapp\\.de\\//', $htaccess)||strpos($htaccess, '%{HTTPS} !=on')===false $designDir)
if(strpos($sitemapSource, 'collectUserMenuLinks') !==false||strpos($sitemapSource, 'dbxContentHome::masterCid')===false||strpos($sitemapSource, 'isNoindex')===false||strpos($sitemapSource, ' $lngs=array($masterLng)')===false) $htaccess
seoFail(string $message, int $code)
exit
Definition index.php:146
DBX schema administration.