Перенаправить определенные подпапки, удалив вопросительный знак параметра - PullRequest
0 голосов
/ 03 декабря 2018

Я использую .htaccess, чтобы перенаправить определенные подпапки своего домена, чтобы удалить знак вопроса для улучшения моих URL.

В настоящее время мои URL-адреса выглядят так:

www.example.com/post/?sometitle

Iя пытаюсь удалить знак вопроса, поэтому это следующий URL:

www.example.com/post/sometitle

В настоящее время у меня есть следующий код в моем .htaccess файле:

RewriteCond %{THE_REQUEST} /post/?([^\s&]+) [NC]
RewriteRule ^ /post/%1 [R=302,L,NE]

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Я использую параметры php GET, я пытаюсь, когда браузер посещает example.com/post/sometitle, чтобы отображалась страница, которая в данный момент example.com/post/?sometitle

В этом случае вам нужнопротивоположность того, что вы спрашиваете в своем вопросе: вам нужно внутренне переписать (не внешне"перенаправление") запроса с example.com/post/sometitle на example.com/post/?sometitle.

Однако вы должны уже изменить все URL-адреса в приложении, чтобы использовать новый формат URL-адреса (без строки запроса).Вам не следует использовать .htaccess в одиночку для этого.

Я также предполагаю, что /post является физическим каталогом и вы действительно обслуживаете index.php в этом каталоге (mod_dir выдает внутренний подзапрос дляэтот файл).Итак, вместо /post/?sometitle, это действительно /post/index.php?sometitle?

Например:

RewriteEngine On

# Rewrite /post/sometitle to filesystem path
RewriteRule ^post/([\w-]+)$ /post/index.php?$1 [L]

Итак, теперь, когда вы запрашиваете /post/sometitle, запрос внутренне переписывается и обрабатывается *Вместо 1028 *.

Я предположил, что «sometitle» может состоять из 1 или более символов a-z, A-Z, 0-9, _ и -.Следовательно, регулярное выражение [\w-]+.

Если это новый сайт, то вы можете остановиться там.Однако если вы изменяете существующую структуру URL, которая уже была проиндексирована поисковыми системами и на которую ссылаются внешние третьи стороны, вам нужно перенаправить старые URL на новые.(Просто для повторения, вы, должно быть, уже изменили URL в своем приложении, в противном случае пользователи будут сталкиваться с повторными перенаправлениями при навигации по сайту.)

Чтобы реализовать перенаправление, вы можете добавить что-то вроде следующего перед переписанное выше:

# Redirect any "stray" requests to the old URL
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ([\w-]+)
RewriteRule ^post/$ /post/%1 [R=302,NE,QSD,L]

Проверка по переменной окружения REDIRECT_STATUS заключается в том, чтобы убедиться, что мы перенаправляем только «прямые запросы» и, таким образом, избегаем цикла перенаправления.Во избежание проблем с кэшированием измените значение на 301 только для проверки.)

В сводке:

RewriteEngine On

# Redirect any "stray" requests to the old URL
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ([\w-]+)
RewriteRule ^post/$ /post/%1 [R=302,NE,QSD,L]

# Rewrite /post/sometitle to filesystem path
RewriteRule ^post/([\w-]+)$ /post/index.php?$1 [L]

ОБНОВЛЕНИЕ: Если у вас естьнесколько URL-адресов («папок»), которые следуют одному и тому же шаблону, например /post/<title>, /home/<title> и /build/<title>, тогда вы можете изменить приведенное выше, чтобы удовлетворить все три, например:

# Redirect any "stray" requests to the old URL
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ([\w-]+)
RewriteRule ^(post|home|build)/$ /$1/%1 [R=302,NE,QSD,L]

# Rewrite /post/sometitle to filesystem path
RewriteRule ^(post|home|build)/([\w-]+)$ /$1/index.php?$2 [L]

В сторону: (С моей шляпой Webmasters ...) Это не очень «улучшение» структуры URL.Если это авторитетный веб-сайт с множеством обратных ссылок и хорошим рейтингом SE, вам следует дважды подумать о внесении этого изменения, так как вы можете увидеть падение рейтинга хотя бы на начальном этапе.

0 голосов
/ 03 декабря 2018

Если ваше требование заключается только в том, чтобы изменить запрос, попробуйте следующее, мы используем флаг QSD , чтобы отбросить строку запроса после того, как наше правило соответствует.

RewriteCond %{QUERY_STRING} ([^\s&]+) [NC]
RewriteRule ^ /post/%1 [R=302,L,NE,QSD]
...