Недавно я разорвал отношения с WordPress и перенес все содержимое моего сайта на свою собственную CMS. Все отлично работает кроме одного. Все предыдущие ссылки на сообщения блога моего сайта заканчиваются косой чертой. Поскольку ни один из моих текущих URL-адресов не имеет завершающей косой черты, предыдущие ссылки больше не работают, и мой SEO почти не существует. Я пытался найти правило htaccess, которое будет перенаправлять все URL-адреса с завершающей косой чертой на URL-адреса без косой черты, но на данный момент ничего не работает.
Перенаправить URL-адреса с косой чертой в конце на URL-адреса без косой черты с помощью правила htaccess с [QSA,L]
Ответы (2)
Используйте это правило перенаправления в качестве первого правила для удаления завершающей косой черты:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [NE,R=301,L]
Вы не хотите удалять его на 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.
С этой конфигурацией:
- http://www.example.com/ *перенаправляет на
- http://example.comt -
- http://www.example.com/main/something redirects to
- http://example.com/something - Everything else redirects to