Как я могу создать пользовательский URL в стиле переполнения стека? - PullRequest
0 голосов
/ 22 июля 2011

Я бы хотел на карту:

mywebsite.com/users/ -> mywebsite.com/users/users.php
mywebsite.com/users -> mywebsite.com/users/users.php
mywebsite.com/users/username -> mywebsite.com/users/user.php?name=username

В настоящее время я использую этот .htaccess в каталоге пользователей:

RewriteEngine On

RewriteRule ^([a-zA-Z0-9_])*$ user.php?name=$1 [L]
RewriteRule ^.*$ users.php [L]

Однако он никогда не генерирует URL user.php?name=$1.

Почему это не работает?

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Вот правила (поместите в .htaccess в корневой папке веб-сайта . Если размещено в другом месте, требуется некоторая настройка):

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

# 1
RewriteRule ^users/?$ /users/users.php [L]

# 2
RewriteCond %{REQUEST_URI} !^/users/users?\.php
RewriteRule ^users/([^/]+)$ /users/user.php?name=$1 [QSA,L]
  1. Правило № 1будет соответствовать вашим первым URL-адресам.

  2. Правило № 2 будет работать с определенным отображением пользователя.Это гарантирует, что он не переписывает уже переписанные URL.


ОБНОВЛЕНИЕ: Если вы хотите поместить его в файл .htaccess в папке /users/, тогда этот URL mywebsite.com/users (без косой черты), скорее всего, не будет работать.

Но в любом случае - вот правила:

Options +FollowSymLinks -MultiViews
RewriteEngine On

# 1
RewriteRule ^$ users.php [L]

# 2
RewriteCond %{REQUEST_URI} !^/users/users?\.php
RewriteRule ^([^/]+)$ user.php?name=$1 [QSA,L]
0 голосов
/ 22 июля 2011

Мне кажется, что он применяет оба правила последовательно: URL соответствует первому правилу, поэтому он добавляет user.php?name=$1, а затем он соответствует второму правилу, поэтому он заменяет строку на users.php. Если это проблема, то для вашего конкретного случая вы можете исправить это, заменив второе регулярное выражение на ^/?$.

...