Как настроить правило перезаписи для списка ключевых слов в URL? - PullRequest
0 голосов
/ 05 апреля 2020

Что я должен сделать sh

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

URL-адреса для перенаправления:

https://www.mydomain.com.au/search-result/?location=victoria

https://www.mydomain.com.au/search-result/?location=new-south-wales

https://www.mydomain.com.au/search-result/?location=queensland

https://www.mydomain.com.au/search-result/?location=south-australia

https://www.mydomain.com.au/search-result/?location=tasmania

https://www.mydomain.com.au/search-result/?location=northern-territory

Куда перенаправить на

Я хочу перенаправить их на домашнюю страницу: https://mydomain.com.au/ (я мог бы позже выбрать перенаправить их все в другом месте, но я могу выполнить эту часть).

ПРИМЕЧАНИЕ : Строка запроса должна быть удалена из перенаправления.

Я не уверен, лучше ли тестировать все шесть из этих location= переменных, или просто проверить одну переменную location=, которая не предназначена для перенаправления.

Одна переменная location=, которая не предназначена для перенаправления, является ?location=western-australia. Например,

https://www.mydomain.com.au/search-result/?location=western-australia

Дополнительные замечания

Обратите внимание, что существуют другие .../search-result/ URL-адреса, которые имеют разные переменные в строках запроса, например ?weather=... или ?water=.... Например, https://www.mydomain.com.au/search-result/?location=victoria&weather=part-shade&water=&pasture=

Как видно из этого примера, также возможно, что в строке запроса будет несколько переменных, например ?location=tasmania&weather=&water=moderate&pasture=.

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

Я думаю, это может быть так же просто, как проверка на наличие /search-result/ AND, за которым следует victoria | tasmania | northern-territory | etc. в URL. Я не могу быть на 100% уверен, что эти слова (victoria, et c.) Не будут отображаться ни в каких других URL-адресах, поэтому моя причина для перенаправления, только если эти слова следуют либо location=, либо /search-result/. Я подозреваю, что location= было бы подходящим условием.

Я поиграл с изменением многих примеров правил перезаписи, которые я нашел в Интернете, и не смог заставить что-либо работать. Я либо получил бы ошибку 501 (сайт cra sh), либо ничего бы не случилось вообще.

Спасибо.

1 Ответ

1 голос
/ 05 апреля 2020

Не уверен, что вы пробовали это, но у меня они хорошо работали:

  • Разрешить любые значения location, кроме western-australia:

    # The request path is /search-result/ or maybe /search-result
    RewriteCond %{REQUEST_URI} ^/search-result/?$
    
    # ..and the query string 'location' is not empty
    RewriteCond %{QUERY_STRING} (^|&)location=.+($|&)
    
    # ..and the value is not 'western-australia'.
    RewriteCond %{QUERY_STRING} !(^|&)location=western-australia($|&)
    
    # Redirect to the home page.
    RewriteRule . / [R=301,NC,L]
    
  • Чтобы разрешить только определенные location значения:

    RewriteCond %{REQUEST_URI} ^/search-result/?$
    
    // Allow only certain location values - (<value>|<value>|...).
    RewriteCond %{QUERY_STRING} (^|&)location=(victoria|new-south-wales)($|&)
    
    RewriteRule . / [R=301,NC,L]
    

И обратите внимание, что в WordPress вам нужно поставить выше перед правила WordPress:

# This is a sample .htaccess file used on a WordPress site.

# PLACE YOUR CUSTOM RULES HERE.

# BEGIN WordPress
<IfModule mod_rewrite.c>
    # ...
    RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Т.е. разместите свои правила над строкой # BEGIN WordPress, чтобы избежать ошибок 404.

И, кстати, я не htaccess эксперт, но, надеюсь, этот ответ поможет вам. :)

...