{"action":"created","issue":{"url":"https://api.github.com/repos/PHP-Fusion-GERMANY/PHP-Fusion/issues/2","repository_url":"https://api.github.com/repos/PHP-Fusion-GERMANY/PHP-Fusion","labels_url":"https://api.github.com/repos/PHP-Fusion-GERMANY/PHP-Fusion/issues/2/labels{/name}","comments_url":"https://api.github.com/repos/PHP-Fusion-GERMANY/PHP-Fusion/issues/2/comments","events_url":"https://api.github.com/repos/PHP-Fusion-GERMANY/PHP-Fusion/issues/2/events","html_url":"https://github.com/PHP-Fusion-GERMANY/PHP-Fusion/issues/2","id":159895838,"number":2,"title":"SEF Links","user":{"login":"Webmeteor","id":12871201,"avatar_url":"https://avatars.githubusercontent.com/u/12871201?v=3","gravatar_id":"","url":"https://api.github.com/users/Webmeteor","html_url":"https://github.com/Webmeteor","followers_url":"https://api.github.com/users/Webmeteor/followers","following_url":"https://api.github.com/users/Webmeteor/following{/other_user}","gists_url":"https://api.github.com/users/Webmeteor/gists{/gist_id}","starred_url":"https://api.github.com/users/Webmeteor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Webmeteor/subscriptions","organizations_url":"https://api.github.com/users/Webmeteor/orgs","repos_url":"https://api.github.com/users/Webmeteor/repos","events_url":"https://api.github.com/users/Webmeteor/events{/privacy}","received_events_url":"https://api.github.com/users/Webmeteor/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/PHP-Fusion-GERMANY/PHP-Fusion/labels/Diskussion","name":"Diskussion","color":"f9d0c4"}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":18,"created_at":"2016-06-13T08:20:28Z","updated_at":"2016-07-05T08:20:23Z","closed_at":null,"body":"Nach welcher Art?\r\n\r\n1. viewpage.php?pageid=1&pagename\r\n2. viewpage/1/pagename\r\n3. viewpage_1_pagename\r\n\r\n1. ist relativ einfach zu realisieren, habe aber noch keine Erfahrungswerte\r\n2. so wie in allen anderen Systemen auch, Nachteil ist, das für CSS und javascript hinzubekommen, genauso das Forum (hatten damals da beim SEO-Fusion richtig Probleme bekommen)\r\n3. auch relativ einfach zu realisieren. Produziert schon einen deutlichen Ranking Schub.\r\n\r\nUnd muss zwingend ein Fallback für mod_rewrite off da sein?\r\nIch denke es gibt mittlerweile keinen Hoster mehr, der mod_rewrite nicht zur Verfügung stellt."},"comment":{"url":"https://api.github.com/repos/PHP-Fusion-GERMANY/PHP-Fusion/issues/comments/230415601","html_url":"https://github.com/PHP-Fusion-GERMANY/PHP-Fusion/issues/2#issuecomment-230415601","issue_url":"https://api.github.com/repos/PHP-Fusion-GERMANY/PHP-Fusion/issues/2","id":230415601,"user":{"login":"SuNflOw1991","id":943484,"avatar_url":"https://avatars.githubusercontent.com/u/943484?v=3","gravatar_id":"","url":"https://api.github.com/users/SuNflOw1991","html_url":"https://github.com/SuNflOw1991","followers_url":"https://api.github.com/users/SuNflOw1991/followers","following_url":"https://api.github.com/users/SuNflOw1991/following{/other_user}","gists_url":"https://api.github.com/users/SuNflOw1991/gists{/gist_id}","starred_url":"https://api.github.com/users/SuNflOw1991/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SuNflOw1991/subscriptions","organizations_url":"https://api.github.com/users/SuNflOw1991/orgs","repos_url":"https://api.github.com/users/SuNflOw1991/repos","events_url":"https://api.github.com/users/SuNflOw1991/events{/privacy}","received_events_url":"https://api.github.com/users/SuNflOw1991/received_events","type":"User","site_admin":false},"created_at":"2016-07-05T08:20:23Z","updated_at":"2016-07-05T08:20:23Z","body":"So, ich habe es jetzt doch noch heute fertig bekommen.\r\n\r\n__`/.htaccess`__\r\n```apache\r\n<IfModule mod_rewrite.c>\r\n    <IfModule mod_negotiation.c>\r\n        Options -MultiViews\r\n    </IfModule>\r\n\r\n    RewriteEngine On\r\n\r\n    RewriteCond %{REQUEST_FILENAME} !-d\r\n    RewriteRule ^(.*)/$ /$1 [L,R=301]\r\n\r\n    RewriteCond %{REQUEST_FILENAME} !-d\r\n    RewriteCond %{REQUEST_FILENAME} !-f\r\n    RewriteRule ^([a-zA-Z_0-9\\-]+)/(.*)$ ./index.php?key=$1&params=$2 [L]\r\n    RewriteRule ^([a-zA-Z_0-9\\-]+)$ ./index.php?key=$1 [L]\r\n</IfModule>\r\n```\r\n\r\n__`/index.php`__\r\n```php\r\n<?php\r\nrequire_once \"maincore.php\";\r\n\r\nif(isset($_GET['key']) && $_GET['key'] != \"\" && validateGETVal($_GET['key'])) {\r\n    // create a list of files in /includes/rewrite\r\n    $rewriteFolder = makefilelist(INCLUDES.\"rewrite\", \".|..\");\r\n\r\n    // create a list of folders in /infusions\r\n    $infusionsFolder = makefilelist(INFUSIONS, \".|..\", true, \"folders\");\r\n\r\n    $locations = array_merge($infusionsFolder, $rewriteFolder);\r\n\r\n    // create an array of possible locations\r\n    $possLocations = array(\r\n        $_GET['key'].\".php\",    // /includes/rewrite/\r\n        $_GET['key']            // /infusions/__NAME__/\r\n    );\r\n\r\n    // find first location match\r\n    $finalLocation = \"\";\r\n    foreach ($locations as $location) {\r\n        if($location == $possLocations[1] && file_exists(INFUSIONS.$location.\"/rewrite.php\")) {\r\n            $finalLocation = INFUSIONS.$possLocations[1].\"/rewrite.php\";\r\n            break;\r\n        }\r\n\r\n        if($location == $possLocations[0]) {\r\n            $finalLocation = INCLUDES.\"rewrite/\".$possLocations[0];\r\n            break;\r\n        }\r\n    }\r\n\r\n    if($finalLocation == \"\") {\r\n        // no location found = 404\r\n        header(\"HTTP/1.0 404 Not Found\", \"\", \"404\");\r\n        $db_connect = null;\r\n        exit;\r\n    }\r\n\r\n    require_once $finalLocation;\r\n\r\n    $db_connect = null;\r\n    exit;\r\n}\r\n\r\nredirect($settings['opening_page']);\r\n\r\n$db_connect = null;\r\n```\r\n\r\n__`/includes/rewrite/news.php`__\r\n```php\r\n<?php\r\nif (!defined(\"IN_FUSION\")) { die(\"Access Denied\"); }\r\n\r\n$rules = array(\r\n    'readmore' => '#^([0-9]+)$#'\r\n);\r\n\r\nif(isset($_GET['params'])) {\r\n    if(preg_match($rules['readmore'], $_GET['params'], $matches)) {\r\n        $_GET['readmore'] = $matches[0];\r\n    }\r\n}\r\n\r\ninclude_once BASEDIR.\"news.php\";\r\n```\r\nWie funktioniert es im Detail?\r\n---\r\nWie oben schon erwähnt wird alles bis zum ersten `/` als Schlüsselwort verwendet. Dieses wird der `index.php` als `$_GET` Variable mitgegeben. Die `index.php` versucht nun anhand dieses Schlüsselworts die Regeln zu finden um ein Rewrite durchzuführen. Werden die Regeln gefunden, wird die gefundene Datei aufgerufen. Besteht der aufgerufene Link aus mehr als nur dem Schlüsselwort, dann wird alles nach dem Schlüsselwort ebenfalls als `$_GET` Parameter mitgegeben. Damit kann dann die gefundene Datei arbeiten und daraus ableiten was man machen möchte. Bei den News gibt es da nur eine Möglichkeit und zwar eine bestimmte News anzuzeigen wenn dies gewünscht ist.\r\n\r\nProbleme?\r\n---\r\nEs wird ein bisschen Arbeit sein alles umzuschreiben da in allen Dateien alle Links angefasst werden müssen. Was die UKs versucht haben ist, Links automatisch per RegEx vor dem Ausliefern zu ändern. Wie wir gesehen haben ist das nicht optimal ich denke wir sollten daraus lernen und direkt alle Links umschreiben. Ich denke dass ist zwar viel Arbeit die sich aber am Ende lohnen wird.\r\n\r\nWeiter habe ich mir keine Gedanken darüber gemacht wie wir abwärtskompatibel sicher stellen wollen. Es gibt kein moderne CMS oder Framework welches eine Abwärtskompatibilität sicher stellt. Ich denke wir leben in einer Zeit in der wir uns darüber keine Gedanken mehr machen müssen. Klar müssten alle Infusionen und so weiter angepasst werden aber! ich denke dass wenn wir ein gutes CMS auf die Beine stellen, sich schon Entwickler finden, die bestehende Infusionen umschreiben.  \r\n\r\n---\r\n\r\nIhr kennt jetzt 2 Vorgehensweisen. Ihr könnt mit einem Daumen hoch abstimmen. Welches die meisten Daumen hoch hat am Ende der Woche, wird dann denke ich umgesetzt."}}
{"actor":{"display_login":"SuNflOw1991"}}