Как заставить веб-страницу работать как подкаталог с htaccess - PullRequest
0 голосов
/ 21 января 2020

Я создаю веб-сайт, на котором есть страница профиля для каждого пользователя.

Я бы хотел, чтобы страницы профиля были доступны при посещении веб-адреса, например:

example.com/profile/username

Очевидно, что было бы нецелесообразно создавать новый PHP файл для каждого зарегистрированного пользователя, и поэтому я пытаюсь перенаправить трафик c с example.com/profile/(whatever) на example.com/profile, где я могу запросить URL и загрузите правильный профиль из базы данных.

Однако я действительно изо всех сил пытаюсь решить, как сделать это с .htaccess. Я перепробовал все виды перенаправлений, и т. Д. c, но не могу заставить его работать. Кто-нибудь может направить меня в правильном направлении?

Единственное, что у меня есть в моем файле .htaccess на данный момент, - это приведенное ниже удаление .php из URL:

# Remove .php

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Любой совет с благодарностью!

Ответы [ 2 ]

0 голосов
/ 21 января 2020

перенаправить трафик c с example.com/profile/(whatever) на example.com/profile

Обратите внимание, что вы должны внутренне переписать непосредственно в файл, который обрабатывает запрос, который я предполагаю /profile.php вместо того, чтобы полагаться на другое переписывание, чтобы позже добавить расширение. Я предполагаю, что код в /profile.php уже обрабатывает запрос по мере необходимости.

Я также предполагаю, что «имя пользователя» может состоять только из символов a-z, A-Z, 0-9, _ (подчеркивание) и - (дефис). Как правило, вы хотите быть максимально точным c.

Попробуйте что-то вроде следующего:

RewriteEngine On

# Disable MultiViews to avoid conflicts with mod_negotiation
# (Since you are using "extensionless URLs")
Options -MultiViews

# Handle requests for `/profile/<username>
RewriteRule ^profile/([\w-]+)$ profile.php [L]

# Append the ".php" extension to any request that does not end in a file extension
RewriteRule ^([^.]+)$ $1.php [L]

В то время как комментарий в вашем коде гласит "Удалить. php". Код на самом деле добавляет расширение файла к URL-адресам, у которых его нет.

В настоящее время это работает только для файлов в документе root (согласно исходному коду), например. /foo. Например, он ничего не будет делать с /foo/bar.

Условие, которое проверяет файловую систему (ie. RewriteCond %{REQUEST_FILENAME} !-f), не требовалось в существующем коде, если только у вас нет реальных файлов, которые не содержит расширение файла? Я также предполагаю, что вам не нужен прямой доступ к каталогам файловой системы (согласно исходному коду).

Нет необходимости экранировать буквальные точки при использовании внутри класса символов.

0 голосов
/ 21 января 2020

Лично для меня всегда было немного сложно создать правильный .htaccess-файл. Я полагаю, что вы пытаетесь дать каждому пользователю полный путь, чтобы быть SEO-дружественным, и найти путь в поисковых системах.

В моем последнем программном обеспечении платы я использовал этот способ: вызов выглядит как

www.yousite.com/index.php / profile / username

Вы можете легко поймать данные (/ profile / username) за индексом. php -позвонить и показать посетителю желаемая страница пользователя. Таким образом, вам не нужно возиться с .htaccess, который - если вы сделаете это неправильно - может заблокировать весь ваш сайт.

...