У меня есть такой URL:
http://domain.com/key1=00998833&ключ2 = 8666886&Par3 = тестирование&страница = 2
В URL есть много параметров, но мне нужно показать более короткую версию URL, когда страница отображается в браузере. Чтобы быть более понятным, мне нужно, чтобы URL был что-то вроде:
http://domain.com/link123456
или немного по-другому.
Есть ли способ сделать это?
Я много искал, но пока не нашел решения.
Спасибо
Поместите в свой файл htaccess:
RewriteRule ^link123456/?$ index.php?key1=00998833&key2=8666886&par3=testing&page=2 [L,QSA]
Если вам нужны все переменные, вы не можете их сократить. Что вы можете сделать, это сохранить ключи локально в БД и поместить идентификатор строки из БД в URL.
Затем, когда URL-адрес загружен, вы просто проверяете БД на наличие строки с переменными.
На самом деле URL будут генерироваться из шорткода. Настройки параметров будут отличаться для каждого URL — Источник комментариев
Это заставляет меня поверить, что вам нужна база данных для хранения коротких URL-адресов против длинных URL-адресов.
Ты можешь использовать index.php
в качестве маршрутизатора, и сохраните короткие URL-адреса в базе данных против длинных URL-адресов.
.htaccess
переписать правилоRewriteEngine On
RewriteRule ^(.*)$ index.php?q=$1 [NC,QSA]
Это сделает http://example.com/short123456
«перенаправить» на http://example.com/index.php?q=short123456
,
CREATE TABLE `urls` (
`short_url` varchar(50) NOT NULL,
`long_url` varchar(500) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Мы будем хранить наши короткие и длинные URL-адреса здесь.
в .htaccess
переписать правило, мы собираемся index.php
, Итак, внутри вашего index.php
мы можем сделать следующее;
<?php
if( isset($_GET['q']) ) { //See if there is any query string
$short_code = ctype_alnum( (string) $_GET['q']) ? (string) $_GET['q'] : ''; //Filter out any potential nasty characters.
/**
* Query database
* SELECT `long_url` FROM `urls` WHERE `short_url` = $short_code
* Best to use PDO or MySQLi to do this (and I'm assuming you're using a MySQL database to store these)
*/
if($query->num_rows) { //There is a result
$result = $query->fetch(PDO::FETCH_ASSOC); //Assuming you've used PDO
header('Location: '. $result['long_url']); //Redirect to the long url
die;
} else {
//Short code doesn't exist
http_response_code(404); //No result, return with 404 Not Found
die;
}
} else {
//Do other logic...
}