Я думаю, RewriteRule ^([A-Za-z0-9_-]+)$ profile.php?un=$1 [L]
решает проблему. Но мне тоже нужно это правило. есть ли шанс, что оба правила будут работать?
Да, это правило, безусловно, будет противоречить правилу, указанному в вопросе. Если /list-usernamexyz
имеет приоритет, то вам нужно убедиться, что это правило является первым в файле .htaccess
.
Организуйте свои директивы следующим образом:
# non-www to www redirect
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HTTP to HTTPS redirect
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L,NE]
# Rewrite - profile list
RewriteRule ^list-([A-Za-z0-9_-]+)$ profilelist.php?un=$1 [L]
# Rewrite - profile
RewriteRule ^([A-Za-z0-9_-]+)$ profile.php?un=$1 [L]
Если вы находитесь на общий сервер, то вы можете удалить первое условие, которое проверяет, что хост не пустой. ie. RewriteCond %{HTTP_HOST} !^$
.
Если у вас есть планы по внедрению HSTS, вам нужно будет отменить два переписывания и перенаправить HTTP-HTTPS перед не-1011 * www redirect.