#apache #.htaccess #mod-rewrite #url-rewriting #friendly-url
#apache #.htaccess #мод-перезапись #url-переписывание #дружественный url
Вопрос:
Уже несколько часов пытаюсь разобраться с этим, но не получается.
У меня есть сайт www.example.com/user.php?username=john Я использую .htaccess
, чтобы сделать это красиво, вот так www.example.com/user/john Я использую следующее .htaccess
правило перезаписи, и оно работает
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*/([a-zA-Z0-9_-] )|([a-zA-Z0-9_-] ))$ ./user.php?username=$1 [L]
Проблема
У меня есть страница профиля, подобная www.example.com/profile.php?username=john Я также использую следующее .htaccess
, чтобы сделать его хорошо выглядящим, например www.example.com/profile/john
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*/([a-zA-Z0-9_-] )|([a-zA-Z0-9_-] ))$ ./profile.php?username=$1 [L]
Теперь это вообще не работает, но когда я удаляю первое правило перезаписи (правило user.php ) и поместите его после второго правила перезаписи (rule profile.php ) страница моего профиля работает, и наоборот,
Так что, по сути, любое правило, которое я ставлю первым, определяет, к какой странице я могу получить доступ с помощью своего URL.
Мне нужно, чтобы это работало для обеих страниц. Я соглашусь с вами, что я не близок к уровню новичка в .htaccess
перезаписи.
Заранее спасибо.
Ответ №1:
Не могли бы вы попробовать следующее. Поскольку URL-адреса имеют свою уникальность, поэтому лучше проверять условие в их %{REQUEST_URI}
значении, я проверяю, начинается ли REQUEST_URI с, user
затем перейдите к 1 правилу, и если оно начинается с profile
, то перейдите к другому, чтобы не было путаницы (где, я полагаю, вы очень хорошо старались, но поскольку нет разделения междуусловия, поэтому, следовательно, его запутанный движок ИМХО).
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/user/([w-] )/?$
RewriteRule ^.*$ /user.php?username=%1 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/profile/([w-] )/?$
RewriteRule ^.*$ /profile.php?username=%1 [NC,L]
Ответ №2:
Вы также можете попробовать ниже, сначала проверив, не является ли входящий запрос ни файлом, ни каталогом, а затем проверить соответствие шаблону.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^user/([w-] )/?$ /user.php?username=$1 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^profile/([w-] )/?$ /profile.php?username=$1 [NC,L]