Это уже не так сложно, вы можете просто использовать команду git filter-branch на клоне вашего репозитория, чтобы отбросить ненужные вам подкаталоги, а затем отправить их на новый пульт.
git filter-branch --prune-empty --subdirectory-filter master
git push -f .
Вам нужно будет создать перезапись мода, которая берет первый каталог и передает его как параметр $ _GET.
Попробуйте следующее:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)/$ index.php?user=$1
Это должно перезаписать все после '/' как index.php? user = directory
Взгляните на механизм перезаписи . В некоторых фреймворках также есть классы для выполнения этой работы, например, в Zend Framework есть Zend_Router , которые вы можете использовать. Вы можете использовать это самостоятельно, они есть и в других фреймворках, проверьте документацию, чтобы узнать, какой вариант вам больше нравится.
Вот сокращенная версия моего ответа, на тот случай, если кто-нибудь подскажет:
Внутри этого каталога создайте файл .htaccess со следующим mod_rewrite:
REQUEST_URIRewriteEngine on
RewriteRule! \. (gif | jpg | png | css) $ /your_web_root/users/index.php'REQUEST_URI
Теперь все запросы страниц для любых расширений, не указанных в скобках в каталоге пользователей, будут отправляться в index.php
index.php берет URL-адрес, введенный пользователем, и берет бит в конце. Есть множество способов сделать это, вот простой, если вы знаете, что последней частью всегда будет имя пользователя, а не, возможно, имя пользователя / pics /:
$url_request = $_SERVER['REQUEST_URI']; //Returns path requested, like "/users/foo/"
$user_request = str_replace("/users/", "", $url_request); //this leaves only 'foo/'
$user_name = str_replace("/", "", $user_request); //this leaves 'foo'
Теперь просто сделайте запрос в БД для этого имени пользователя . Если он существует, index.php выводит профиль, если у него нет перенаправления скрипта на: / users / 404. php
Но если пользователь действительно существует, все, что ваш посетитель увидит, это то, что он ввел
www.example.org/users/foo/
и попал на страницу пользователя foo.
Нет переменных get, которые хакер мог бы использовать, и довольно, легко поместите на другой блог или URL-адрес визитки.
На самом деле, можно избавиться от "?" и иметь красивый простой www.example.org/users/someusername.
Я узнал об этом из статьи Тилля Кряка « Как добиться успеха с URL-адресами » в A List Apart .
Итак, вам нужно будет понять Apache, .htaccess и mod_rewrite, и этот метод действительно требует от вас понимания рисков безопасности и их учета. Вот основная идея:
Вы создаете каталог под названием "users" (вам не обязательно, но это все упростит), и в этот каталог вы помещаете свой. htaccess, который содержит mod_rewite, который фактически говорит, что «все запросы к файлам или каталогам, не относящиеся к определенному типу (изображения, PDF-файлы), должны быть отправлены этому сценарию, который будет определять, куда отправлять пользователя». Mod_rewrite из статьи выглядит так:
RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/index.php
В моем примере это будет "/your_web_root/users/index.php", причина, по которой это проще, в том, что вместо этого скрипта, обрабатывающего ВСЕ запросы на вашей странице, он просто работа с теми, которые находятся в каталоге пользователя.
Затем у вас есть скрипт php, который говорит: «Хорошо, какой был дан URL?» и он в основном захватывает часть после последней косой черты (или двух, если есть еще одна в самом конце), и ДЕФИЦИРУЕТ то, что он находит (что действительно важно), и спрашивает "существует ли это имя пользователя в моей БД?" Если да, он отправляет инициатора запроса в профиль пользователя, но с красивым URL-адресом (мы вернемся к нему через секунду), если нет, он отправляет их на страницу «Пользователь не найден» или на что угодно.
если он найдет вашего пользователя, PHP-скрипт выведет профиль пользователя (опять же, убедитесь, что он дезинфицирован. Любой придурок, который у вас может быть, может - если вы дадите ему возможность - встроить вредоносный код в свой профиль, зная браузеры, просматривающие профиль, выполнят этот код). Поскольку запрошенная страница была:
www.example.org/users/example_user
и поскольку вы используете mod_rewrite вместо перенаправления, URL-адрес остается прежним, а сценарий, который загружает файл .htaccess, просто выгружает профиль пользователя. Для посетителей они просто видят, что они ввели вышеуказанный URL-адрес, и появился профиль пользователя.
Вы также хотите, чтобы сценарий PHP проверял, выполняет ли пользователь перенаправление на страницу «пользователь не найден», вместо того, чтобы просто выводить страницу «user_not_found». Это сделано для того, чтобы любой, кто вводит:
www.example.org/users/blabhaboehbohe
, увидит изменение URL-адреса на
www.example.org/users/notfound/
вместо того, чтобы видеть, что URL-адрес остается прежним. Если хакер видит, что URL-адрес не изменяется, он теперь знает, что вы используете mod_rewrite и, следовательно, должен существовать сценарий, обрабатывающий фактический вывод. Если они это знают, они могут начать сходить с ума, ища каждую дыру в системе безопасности, которую вы, возможно, оставили открытыми.
Ура.
теперь они знают, что вы используете mod_rewrite и, следовательно, должен существовать сценарий, обрабатывающий фактический вывод. Если они это знают, они могут начать сходить с ума, ища каждую дыру в системе безопасности, которую вы, возможно, оставили открытыми.Ура.
теперь они знают, что вы используете mod_rewrite и, следовательно, должен существовать сценарий, обрабатывающий фактический вывод. Если они это знают, они могут начать сходить с ума, ища каждую дыру в системе безопасности, которую вы, возможно, оставили открытыми.Ура.