2014-09-13 5 views
2

я в настоящее время есть следующий код на месте, чтобы дать пользователям свой собственный URL для имени пользователя:.htacess имя пользователя URL, если каталог существует

RewriteEngine On 
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?username=$1 
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?username=$1 

Однако любые существующие каталоги уже не такие, как /about/ или /terms/ не работают, потому что это код перезаписал URL-адрес.

Есть ли вообще я могу настроить этот код, чтобы указывать только URL-адрес профиля, если файл или каталог еще не существует?

+0

https://stackoverflow.com/q/25710768/1190388 – hjpotter92

ответ

3

Вы должны проверить, существует ли папка на самом деле, и если это применяется к правилу, которое делает не перенаправлением. Если эти условия не совпадают, тогда будут продолжаться правила, которые делают перенаправление.

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?username=$1 
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?username=$1 

Флаг -f означает, что он существует в виде файла, а -d означает каталог. Теперь, если запрашиваемый файл на самом деле представляет собой файл или каталог не будет продолжать правила переадресации

Кроме того, вы можете сократить ваше правило редиректа на:

RewriteRule ^([a-zA-Z0-9_-]+)/?$ profile.php?username=$1 

? после / означает, что он будет совпадать с или без этого персонажа. Поскольку остальное регулярное выражение не изменяется, это правило будет решать оба случая сразу.

Смежные вопросы