Как управлять несколькими папками в моем домене? - PullRequest
0 голосов
/ 28 декабря 2011

Я хочу создать субдомены, подобные этому:

domain.com/type/city

Примеры:

domain.com/restaurants/new_york
domain.com/hotels/new_york
domain.com/restaurants/chicago

У меня есть тысячи городов в базе данных mysql.

Я подумал о некоторых вариантах:

  • Тысяча папок с index.php для перенаправления (я думаю, что неправильно).
  • Создайте карту сайта со всеми ссылками (domain.com?type=hotels&city=chicago) и управляйте ими по коду с помощью базы данных.
  • Apache

Пожалуйста, какой будет лучший способ для этого? Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Вы можете решить эту проблему с помощью комбинации конфигурации PHP и Apache. Это наиболее распространенное решение, встречающееся в популярных программах для веб-сайтов PHP, таких как Drupal и Wordpress.

Идея состоит в том, чтобы Apache отправлял весь трафик в один файл index.php и передавал оставшуюся часть пути в качестве параметра для PHP, чтобы справиться с ним.

Вы должны быть осторожны с несколькими крайними случаями; если запрашивается такой файл, как ./public/styles.css, вы не хотите обрабатывать его через свое PHP-приложение, но хотите, чтобы apache обслуживал файл напрямую. Существующие файлы должны быть обработаны Apache, а все остальное - приложением .

В вашем .htaccess :

  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Первая строка сообщает Apache, что нужно отправлять обычные файлы самостоятельно. Вторая строка делает то же самое для существующих каталогов. Третья строка позволяет избежать того, что браузеры (особенно версия IE6), которые запрашивают example.com/favicon.ico, не забивают ваше PHP-приложение.

Затем он передает все по index.php и добавляет остаток пути в параметр q.

Внутри index.php вы можете прочитать это и принять меры:

<?php
$path = $_GET['q'];
$params = explode('/', $path);

print $path;
print_r($params);
?>
0 голосов
/ 28 декабря 2011

Тысячи папок были бы неправильным способом, который наверняка.

Если вы начнете создавать карту сайта со ссылками типа domain.com/?type=hotels&city=chicago, вы получите хорошую структуруможет управлять программно.

Сначала начните это и работайте, затем найдите .htaccess и mod_rewrite, которые вы можете затем использовать для сопоставления с domain.com/type/city к вашим ссылкам, уже работающим.* Похоже, это хорошая стратегия для быстрой работы, а также для того, чтобы получить самое красивое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...