Fix redirect to home when opening pretty URL
This commit is contained in:
parent
e9a9980fa2
commit
1f7c1bb66c
3 changed files with 76 additions and 11 deletions
|
@ -122,6 +122,12 @@ if (isset($api)) {
|
||||||
/**
|
/**
|
||||||
* Pretty URLs
|
* Pretty URLs
|
||||||
*/
|
*/
|
||||||
|
$url = new \wishthis\URL($_SERVER['REQUEST_URI']);
|
||||||
|
|
||||||
|
if ($url->isPretty()) {
|
||||||
|
$_SESSION['_GET'] = query_to_key_value_pair($url->getPermalink());
|
||||||
|
}
|
||||||
|
|
||||||
if ($_SERVER['QUERY_STRING']) {
|
if ($_SERVER['QUERY_STRING']) {
|
||||||
$_SESSION['_GET'] = $_GET;
|
$_SESSION['_GET'] = $_GET;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,11 +14,53 @@ class URL
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isPretty(): bool
|
||||||
|
{
|
||||||
|
return !preg_match('/^\/\?.+?=.+?$/', $this->url);
|
||||||
|
}
|
||||||
|
public function getPermalink(): string
|
||||||
|
{
|
||||||
|
$htaccess = preg_split('/\r\n|\r|\n/', file_get_contents(ROOT . '/.htaccess'));
|
||||||
|
$permalink = '';
|
||||||
|
|
||||||
|
foreach ($htaccess as $index => $line) {
|
||||||
|
$parts = explode(chr(32), trim($line));
|
||||||
|
|
||||||
|
if (count($parts) >= 2) {
|
||||||
|
switch ($parts[0]) {
|
||||||
|
case 'RewriteRule':
|
||||||
|
$rewriteRule = $parts[1];
|
||||||
|
$target = $parts[2];
|
||||||
|
|
||||||
|
$regex = str_replace('/', '\/', $rewriteRule);
|
||||||
|
|
||||||
|
if (preg_match('/' . $regex . '/', ltrim($this->url, '/'), $matches)) {
|
||||||
|
$permalink = $target;
|
||||||
|
|
||||||
|
preg_match_all('/\$\d+/', $target, $placeholders);
|
||||||
|
$placeholders = reset($placeholders);
|
||||||
|
|
||||||
|
foreach ($placeholders as $index => $placeholder) {
|
||||||
|
$permalink = str_replace($placeholder, $matches[$index + 1], $permalink);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $permalink;
|
||||||
|
}
|
||||||
|
|
||||||
public function getPretty(): string
|
public function getPretty(): string
|
||||||
{
|
{
|
||||||
$htaccess = preg_split('/\r\n|\r|\n/', file_get_contents(ROOT . '/.htaccess'));
|
$htaccess = preg_split('/\r\n|\r|\n/', file_get_contents(ROOT . '/.htaccess'));
|
||||||
$pretty_url = '';
|
$pretty_url = '';
|
||||||
|
|
||||||
|
if (!$this->url) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($htaccess as $index => $line) {
|
foreach ($htaccess as $index => $line) {
|
||||||
$parts = explode(chr(32), trim($line));
|
$parts = explode(chr(32), trim($line));
|
||||||
|
|
||||||
|
@ -36,17 +78,7 @@ class URL
|
||||||
explode('&', parse_url($target, PHP_URL_QUERY))
|
explode('&', parse_url($target, PHP_URL_QUERY))
|
||||||
);
|
);
|
||||||
$flags = explode(',', substr($parts[3], 1, -1)) ?? array();
|
$flags = explode(',', substr($parts[3], 1, -1)) ?? array();
|
||||||
|
$parameters = query_to_key_value_pair($this->url);
|
||||||
$parameters_pairs = explode('&', parse_url($this->url, PHP_URL_PATH));
|
|
||||||
$parameters = array();
|
|
||||||
|
|
||||||
foreach ($parameters_pairs as $index => $pair) {
|
|
||||||
$parts = explode('=', $pair);
|
|
||||||
$key = reset($parts);
|
|
||||||
$value = end($parts);
|
|
||||||
|
|
||||||
$parameters[$key] = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
preg_match_all('/\(.+?\)/', $rewriteRule, $regexes);
|
preg_match_all('/\(.+?\)/', $rewriteRule, $regexes);
|
||||||
|
|
||||||
|
|
27
src/functions/queryToKeyValuePair.php
Normal file
27
src/functions/queryToKeyValuePair.php
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Jay Trees <github.jay@grandel.anonaddy.me>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query string to key value pair
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function query_to_key_value_pair(string $query): array
|
||||||
|
{
|
||||||
|
$query = str_contains($query, '?') ? parse_url($query, PHP_URL_QUERY) : $query;
|
||||||
|
$parameters_pairs = explode('&', $query);
|
||||||
|
$parameters = array();
|
||||||
|
|
||||||
|
foreach ($parameters_pairs as $index => $pair) {
|
||||||
|
$parts = explode('=', $pair);
|
||||||
|
$key = reset($parts);
|
||||||
|
$value = end($parts);
|
||||||
|
|
||||||
|
$parameters[$key] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $parameters;
|
||||||
|
}
|
Loading…
Reference in a new issue