Перенаправить URL-адреса с косой чертой в конце на URL-адреса без косой черты с помощью правила htaccess с [QSA,L]

Недавно я разорвал отношения с WordPress и перенес все содержимое моего сайта на свою собственную CMS. Все отлично работает кроме одного. Все предыдущие ссылки на сообщения блога моего сайта заканчиваются косой чертой. Поскольку ни один из моих текущих URL-адресов не имеет завершающей косой черты, предыдущие ссылки больше не работают, и мой SEO почти не существует. Я пытался найти правило htaccess, которое будет перенаправлять все URL-адреса с завершающей косой чертой на URL-адреса без косой черты, но на данный момент ничего не работает.


person SLV    schedule 15.07.2016    source источник
comment
Добро пожаловать в Stack Overflow. Я уверен, что если бы вы опубликовали то, что пробовали до сих пор, люди были бы более готовы помочь. См. раздел Как задать хороший вопрос.   -  person Tibrogargan    schedule 15.07.2016


Ответы (2)


Используйте это правило перенаправления в качестве первого правила для удаления завершающей косой черты:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [NE,R=301,L]
person anubhava    schedule 15.07.2016

Вы не хотите удалять его на 100% для SEO в WordPress. #

Но это покажет вам, как это сделать, если вы этого хотите. WordPress "/" исправления. Мой WordPress Gist

Можно конвертировать, так что полезно Файл конфигурации: nginx.conf ...

location  /mirror/foo/ {
        ...
        rewrite ^(.*[^/])$ $1/ permanent;
        ...
}

...

Описание Исправления WordPress "/" PHP Извлечение завершающей косой черты, если блог настроен на добавление завершающей косой черты.

Условно добавляет косую черту в конце, если в структуре постоянной ссылки есть косая черта в конце, и удаляет косую черту в конце, если нет. Строка проходит через фильтр ‘user_trailingslashit’. Удаляет косую черту из строки, если в блоге они не установлены.

использование

<?php user_trailingslashit( $string, $type_of_string ); ?>

Параметры

$string
(string) (false) URL with or without a trailing slash.
Default: None
$type_of_url
(string) (false) The type of URL being considered (e.g. single, category, etc) for use in the filter.
Default: None
Return Value (string) 

Добавляет/удаляет косую черту в конце на основе структуры постоянной ссылки. codex.wordpress. /Function_Reference/user_trailingslashit

2. Если вы хотите добавить "/"

<?php trailingslashit( $string ) ?>

Примеры

<?php
$path = trailingslashit( '/home/julien/bin/dotfiles' ); 
?>

$path теперь будет содержать:

/home/julien/bin/dotfiles/

(Обратите внимание на косую черту в конце) https://codex.wordpress.org/Function_Reference/trailingslashit

3. Это новинка. Наиболее важной частью любого теста является утверждение. Утверждение — это сравнение между ценностью, которую вы ожидаете получить от системы, и ценностью, которую вы действительно получаете. Самые простые тесты могут состоять только из одного утверждения. Пример:

public function test_trailingslashit_should_add_slash_when_none_is_present() {
    $this->assertSame( 'foo/', trailingslashit( 'foo' ) );
}

Метод assertSame() принимает два параметра: ожидаемое значение (в данном случае жестко закодированная строка 'foo/')) и фактическое значение (значение, возвращаемое trailingslashit()).

Аннотированный список общих утверждений можно найти ниже. https://make.wordpress.org/core/handbook/testing/automated-testing/writing-phpunit-tests/#assertions

Попробуйте эти правила: (in www.example.com's server block) rewrite ^/$ http://example.com permanent break; rewrite ^/main(.*)$ http://example.com$1 permanent break; rewrite ^(.*)$ http://blog.example.com$1 permanent; Убедитесь, что вы перезагрузили nginx.
С этой конфигурацией:

  1. http://www.example.com/ *перенаправляет на
  2. http://example.comt -
  3. http://example.com/something - Everything else redirects to
person Thomas Zickell    schedule 09.02.2018