Каков наилучший способ удалить = и? в URL-адресе из метода get в PHP? Я работаю над структурой разбиения на страницы моего веб-сайта, и в настоящее время это выглядит так:
www.example/test/?page=3
Я хочу, чтобы это выглядело так:
www.example/test/3
Может ли это быть рассмотрено непосредственно в методе PHP get с некоторым дополнительным кодом или это нужно сделать через файл htaccess?
Вот как выглядит мой htaccess-файл прямо сейчас:
RewriteBase / RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.html -f RewriteRule ^(.*)$ $1.html RewriteCond %{REQUEST_URI} /index\.html?$ [NC] RewriteRule ^(.*)index\.html?$ "/$1" [NC,R=301,NE,L]
Вот моя попытка, я сжал уже существующий ответ из разных тем StackOverflow, посвященных извлечению URL-адресов, и я придумал это решение:
<?php function http_protocol() { /** * @see https://stackoverflow.com/a/6768831/3753055 */ return (isset($_SERVER['HTTPS']) ? 'https' : 'http') . '://'; } function http_host() { return $_SERVER['HTTP_HOST']; } function http_uri() { return parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH); } function http_refactored_query_strings() { $queries = explode('&', $_SERVER['QUERY_STRING']); $refactoredQueries = []; foreach( $queries as $query ) { $refactoredQueries[] = filter_var(explode('=', $query)[1], FILTER_SANITIZE_STRING); } $queries = implode('/', $refactoredQueries); return $queries ?: ''; } function http_refactored_url() { return http_protocol() . http_host() . http_uri() . http_refactored_query_strings(); } echo http_refactored_url(); ?>
Попробовал несколько примеров:
http://example.com/test.php
http://example.com/test.php/3
https://example.com/page/3
http://example.com/3
Для части рефакторинга строки запроса я использовал $_SERVER['QUERY_STRING]
и взорвал значение в &
character. потому что первый ?
не содержится в $_SERVER['QUERY_STRING']
. Таким образом, вы придумываете множество массивов, содержащих строки, такие как page=3
, view=page
, … И заходите, разделите его с помощью =
разделителя и получите второй элемент (index: 1
), чтобы добавить его в решение.
Надеюсь, поможет
Вы можете сделать это, используя промежуточную страницу, скажем, index.php и применить .htaccess переписать только для страницы индекса и загрузки на основе GET [] на index.php.
Вы можете сослаться на это: переписывание URL-адресов в PHP без htaccess