Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Подменить URL (https://javascript.ru/forum/server/53133-podmenit-url.html)

ruslan_mart 22.01.2015 10:43

Подменить URL
 
Собственно, такой возник вопрос.

Допустим, у меня есть некая БД статей сайта, у каждой статьи есть ID.
В URL выглядит это таким образом: site.ru/pages/?id=N, где N - ID статьи.

Но вот что мне стало интересно: можно ли как-нибудь сделать так, чтобы для каждой статьи я мог указывать директорию, в БД. Например, по мимо ID в БД ещё будет поле DIR, в котором хранится директория к статье. Чтобы выглядело таким образом: site.ru/pages/MyState/ или /site.ru/pages/MyState/Bla

Есть конечно идея организовать таким образом: site.ru/?/pages/MyState/ и парсить GET, но это не есть сахар.

P.S.: для каждой статьи создание папки с index.php не катит. Нужно чтобы всё работало от одного index.php, который находится в папке pages.

P.P.S.: подмена URL через JavaScript с помощью history.pushState тоже не катит.

Буду благодарен за любую помощь. :)

danik.js 22.01.2015 10:57

Если статья однозначно идентифицируется по id, а твой DIR - чисто для красоты, то пропиши в htaccess внутренний редирект, чтобы все запросы к pages/* редиректились в /pages/index.php.
При выводе ссылок подставляй поле из базы.

Можешь ко всему прочему сделать ЧПУ ссылки, заменив id красивым алиасом (и красиво, и полезно для SEO).

ruslan_mart 22.01.2015 11:23

danik.js, так я и хочу сделать ЧПУ. Я просто никогда с этим не сталкивался, всё делал просто по ID.

Если редирект, то ведь в ссылке будет отображаться URL редиректа получается, site.ru/pages/index.php. А мне нужно, чтобы именно в URL был ЧПУ типо site.ru/pages/lalala/. Не создавать же для каждой стать папку с index.php, я уверен, что можно как-то сделать по человечески.

Можешь подробнее объяснить, что и как? Буду благодарен. А то я не вникаю как такое сделать.

Safort 22.01.2015 11:38

Ruslan_xDD,
из .htaccess делаешь перенаправление всех запросов на роутер, который разбирает и анализирует запрашиваемый url, ну а потом лезешь в БД и выводишь что нужно.

Safort 22.01.2015 11:40

Вот код моего стааарого .htaccess, мб пригодится.

AddDefaultCharset utf-8

php_flag magic_quotes_gpc off

RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^.*$ index.php [L]

ruslan_mart 22.01.2015 11:48

Safort, ну а после перенаправления URL нормальный останется? Не изменится на тот, на который идёт перенаправление?

danik.js 22.01.2015 12:09

Цитата:

Сообщение от Ruslan_xDD
Safort, ну а после перенаправления URL нормальный останется? Не изменится на тот, на который идёт перенаправление?

Редирект ВНУТРЕННИЙ. Он только сервака касается. Клиенту пофиг че там на сервере творится.

Safort 22.01.2015 12:12

Ruslan_xDD,
для пользователя будет всё так же как и раньше. Но тебе теперь не придётся по идиотски для каждого url с разными путями создавать новую папку и файл index.php в ней. Вместо этого будет один файл, в котором ты сможет обрабатывать все входящие запросы.
Да что я объясняю?) Запусти это на локалке, зайди под разными адресами и увидишь, что всё обрабатывает единый index.php.
Есть, конечно, вариант по лучше - использовать питон или ноду на бэке)

ruslan_mart 22.01.2015 12:52

Safort, спасибо, сейчас по тестирую. :) А сам URL откуда идёт перенаправление как получить в index.php?

Safort 22.01.2015 13:07

Ruslan_xDD,
глобальный $_SERVER['REQUEST_URI'] или что-то типа него.


Часовой пояс GMT +3, время: 03:14.