Правило перезаписи htaccess для URL с переменной не работает - PullRequest
1 голос
/ 21 января 2020

Я хотел бы переслать

www.example.com/list-usernamexyz

на

www.example.com/profilelist.php?un=usernamexyz

Я пробовал с:

RewriteRule ^list-([A-Za-z0-9_-]+)$ profilelist.php?un=$1 [L]

другие правила:

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L,NE]
RewriteRule ^([A-Za-z0-9_-]+)$ profile.php?un=$1 [L] 

но это не работает. Что я должен изменить?

1 Ответ

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

Я думаю, 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.

...