PHP динамическая страница БД переписать URL

Как я могу сделать www.mydomain.com/folder/?id=123 --- & gt; www.mydomain.com/folder/xCkLbgGge

Я хочу, чтобы моя страница запросов к БД получала свой собственный URL-адрес, как я видел в твиттере и т. Д. И т. Д.

Ответы на вопрос(3)

Это может быть достигнуто сmod_rewrite например через.htaccess файл.

 user112148713 июн. 2012 г., 22:13
Спасибо, я посмотрю на это прямо сейчас! :)

После этого вам нужно будет сделать несколько регулярных выражений, чтобы этот маленький зверь работал. Я предполагаю, что id - это folder.php? Id = 123.

Например, часть папки: RewriteRule ^ folder / ([a-zA-Z0-9 _-] +) / ([0-9] +). Html $ folder.php? Id = $ 123

Решение Вопроса

всяком случае, хотя.

В конечном счете, вам нужно иметь файл .htaccess, который перехватывает весь ваш входящий трафик, а затем преобразовывает его на уровне сервера для работы с вашим PHP в том смысле, что вы все равно сохраните логику? Id = 123 без изменений, но для клиента side "/ папка / FHJKD /"; будет видимым результатом.

Вот пример файла .htaccess, на котором я использую аналогичную логику .. (как и Wordpress в этом отношении).

RewriteEngine On
#strips the www out of the domain if there
RewriteCond %{HTTP_HOST} ^www\.domain\.com$

#applies logic that changes the domain from http://mydomain.com/post/my-article
#to resemble http://mydomain.com/?id=post/my-article
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?id=$1 [QSA,L]

то, что это сделает, это возьмет все после domain.com/ и передаст его в качестве переменной в index.php, переменная в этом примере будет «id»; Исходя из этого, вы должны придумать логику, которая наилучшим образом соответствует потребностям вашего сайта.

пример

<?php
 //the URL for the example here: http://mydomain.com/?id=post/my-article
 if($_GET['id'])
 {
   $myParams = explode('/', $_GET['id']);
   echo '<pre>';
   print_r($myParams);
   echo '</pre>';
 }
?>

теперь логика для этого должна быть гораздо глубже, это всего лишь чистый пример на базовом уровне, но в целом и особенно потому, что вы работаете с базой данных, я полагаю, вы захотите убедиться, что $ myParams очищен от вредоносного кода, что может ввести в ваш PHP или базу данных.

Выход из вышеперечисленного$myParams с помощьюprint_r() было бы:

Array(
   [0] => post
   [1] => my-article
)

Для работы с ним вам нужно сделать как минимум

echo $myParams[0].'<br />';

или вы можете сделать это так, потому что большинство браузеров добавят финальный /

<?php
 //the URL for the example here: http://mydomain.com/?id=post/my-article
 if($_GET['id'])
 {
   //breaks the variable apart, removes any empty array values and reorders the index
   $myParams = array_values(array_filter(explode('/', $_GET['id'])));
   if(count($myParams > 1)
   {
       $sql = "SELECT * FROM post_table WHERE slug = '".mysql_real_escape_string($myParams[1])."'";
       $result = mysql_query($sql);
   }

 }
?>

Теперь это, к сожалению, очень грубый пример, вам нужно поработать над логикой, чтобы предотвратить внедрение mysql, и затем вы примените запрос, как если бы вы сейчас извлекали свои статьи, используя просто id = 123.

В качестве альтернативы вы также можете пойти совершенно другим путем и исследовать чудеса MVC (Model View Control). Что-то вроде CodeIgniter - это приятная и легкая среда MVC, с которой можно начать. Но это зависит от вас.

 14 июн. 2012 г., 19:53
к сожалению, повсюду нет ни одного примера, приведенного ниже, поскольку у каждого в буквальном смысле есть разные потребности. В моем примере я превращаю идентификатор переменной в массив с помощью разнесения так$myParams[0] будет вашей точкой прыжка. Теперь большинство людей добавят дополнительный столбец в свои таблицы базы данных, по крайней мере, таким образом, чтобы они могли легко согласовать то, что они имеют, с этой концепцией, не меняя при этом много. Теперь этот столбец будет частью slug .com / my-article в вашем URL, в котором будет храниться «my-article» quot; my-article & quot; вы бы искали это и работали с ним, как если бы вы работали с любой другой БД
 14 июн. 2012 г., 19:50
Это немного сложно, да, но ... это практически единственный способ достичь того, чего ты хочешь. Вы должны иметь htaccess, как я упомянул, тогда, исходя из того, что каждый входящий запрос будет проходить через ваш index.php, все, что заканчивается после .com /, будет обрабатываться как переменная, очень похожая на параметр $ _GET, т.е.: .com /? ID = 123. При этом вы в основном строите свой сайт так же, как обычно, применяете ту же логику к получению данных из базы данных, как это было до того, как вам пришлось работать с get varaiable немного иначе при начальной загрузке.
 14 июн. 2012 г., 20:14
Я обновил свой оригинальный пост, чтобы расширить то, о чем я говорю. Однако, как я, к сожалению, сказал, потому что все потребности разные, нет единого отдельного примера, который можно было бы использовать после того, что кажется малопонятным для работы. В общем, единственный способ достичь того, чего вы хотите, - это начать с начального исправления htaccess, которое перезаписывает поведение ядра Apache для ваших нужд, а затем делать то, что все после, зависит от того, что вы делаете с PHP или языком сценариев на стороне сервера. выбора. Пожалуйста, обращайтесь ко мне, если хотите, и, возможно, мы сможем разобраться с вами.
 user112148714 июн. 2012 г., 19:18
Это кажется очень сложным, чтобы заставить его работать. Мне нужно использовать его на страницах, которые будут добавлены в базу данных пользователями. Есть ли рабочий пример для этой техники? - единственные, с которыми я сталкивался, описывая это, требуют изменений в настройках сервера apache.
 user112148714 июн. 2012 г., 20:39
Большое спасибо! Я попытаюсь разобраться в этом, хотя все еще есть много вопросительных знаков. Сначала я начну с базового и попытаюсь понять эту концепцию. Единственное альтернативное решение, о котором я могу подумать, - это написать скрипт, который создает файл index.php с db-кодом в качестве включаемого, и поместить его в папку со случайным именем. Не так аккуратно, хотя.

Ваш ответ на вопрос