У меня есть URL-адреса моего сайта, такие как URL-адрес переполнения стека. Мои URL-адреса указаны ниже.
http://www.example.com/1255544/this-is-the-url-text
В этом URL-адресе 1255544
– это идентификатор, а this-is-the-url-text
заголовка URL-адреса, который хранится в базе данных. Я заметил, что URL-адреса переполнения стека работают на базе id. Предположим, что здесь находится URL переполнения стека
http://stackoverflow.com/questions/15679171/new-way-to-prevent-xss-attacks
В этом URL-адресе 15679171
является идентификатором сообщения. Когда я изменил этот идентификатор на 15706581
не касаясь 15706581
« new-way-to-prevent-xss-attacks
и нажав «Ввод», URL-адрес автоматически изменился на следующий URL-адрес:
http://stackoverflow.com/questions/15706581/simplecursoradapter-does-not-load- external-sqlite-database-id-error
И когда я попытался удалить часть части текста заголовка URL, как показано ниже
http://stackoverflow.com/questions/15679171/new-way-to-preve
Он автоматически корректирует URL-адрес, как показано ниже:
http://stackoverflow.com/questions/15679171/new-way-to-prevent-xss-attacks
Это означает, что данные извлекаются из базы данных на основе идентификатора 15679171
а соответствующий текст заголовка URL-адреса, new-way-to-prevent-xss-attacks
, прикрепляется в соответствии с идентификатором.
Я также хочу это сделать. Но проблема в том, что я не пойму, что если кто-то изменит идентификатор URL-адреса, текст заголовка должен автоматически измениться. Как мне это сделать?
Я подумал следующее:
$url_id = $_GET["id"]; $url_txt = $_GET["url_txt"]; $qry = "SELECT * FROM mytable WHERE url_id = '{$url_id}' LIMIT 1"; $data = mysql_query($qry); $data_set = mysql_fetch_array($data); if($url_txt== $data_set["url_txt"]) { // proceed further } else { $rebuilt_url = "http://www.example.com/" . $url_id . "/" . $data_set["url_txt"]; header("Location: {$rebuilt_url}") // Redirect to this URL }
Это правильный и эффективный способ выполнить это действие или нет? Есть ли решение?
Ваш код выглядит довольно хорошо, и в одном из моих ответов «Переполнение стека» я также предложил аналогичный подход. Однако я предлагаю лишь одно незначительное улучшение. Вместо:
header("Location: {$rebuilt_url}");
Ты должен сделать:
header ('HTTP/1.1 301 Moved Permanently'); header("Location: {$rebuilt_url}");
Это позволит браузеру кэшировать эти URL агрессивно, а код и SQL-запросы не будут выполняться каждый раз.
Также проверьте:
Если вы используете Apache , я думаю, вы должны знать о перезаписи URL-адресов
При переписывании URL-адресов вы переписываете URL-адрес для более удобного просмотра. Взгляните на URL-адрес ниже.
и когда вы переписываете URL-адрес, это стало
http://www.downloadsite.com/Nettools/Messengers
Необходимо переписать URL-адрес в настройке Apache (правила перезаписи), чтобы он переписывал ваш URL-адрес до того, как запрос интерпретируется PHP, поэтому вы получите точный ресурс, который хотите приобрести
RewriteRule ^/category$ /content.php RewriteRule ^/category/([0-9]+)$ /.php?id=$1 RewriteRule ^/category/([0-9]+),([ad]*),([0-9]{0,3}),([0-9]*),([0-9]*$) cat.php?id=$1&sort=$2&order=$3&start=$4
Ну, я не могу объяснить вам все здесь, но ниже я предоставляю вам некоторые ссылки, где вы можете узнать о перезаписи URL.
Это лучший хак, который вы можете сделать для создания дружественных URL-адресов!
Ресурсы: