Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Удаление множественных "//////" слешей в URL или паранойя SEOшников


ocdev_pro

652 views

Практически каждый интернет-магазин после того как попадет под крыло СЕО-специалиста сталкивается с задачей, когда любой их движок opencart не зависимо от сборки, позволяет в url написать произвольное количество слешей и сервер отдает при этом 200 код.

 

После некоторых проверок выяснилось, что URL вида http://site.com/// или https://site.com/category////tovar/// на nginx сервере абсолютно никак нельзя отловить в php через 

$_SERVER['REQUEST_URI']
или
$this->request->server['REQUEST_URI']

 

И реальный URL в адресной строке виден только серверу и javascript в браузере.

Соответственно принято решение, устранять это на стороне конфигурации веб-сервера, в том числе и для Apache сервера, что бы не извращаться на php. Но независимо от веб-сервера, этот "косяк" присутствует практически на всех магазинах, поэтому предлагаю быстрое и компактное решение проблемы ниже.


для Apache в .htaccess можно использовать код, сразу после:
RewriteBase /

RewriteCond %{THE_REQUEST} \s[^?]*//
RewriteRule ^.*$ /$0 [R=302,L,NE]

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

RewriteCond %{THE_REQUEST} \s/{2,}
RewriteRule (.*) $1 [R=301,L]

RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
RewriteRule (.*) %1/%2 [R=301,L]

image.png.bfecc6d65b518a57d4ce39ee0d1680b3.png

взято с https://stackoverflow.com/a/68450398

 

для Nginx в конфигурации вашего vhost - site.com.conf

в скопе Server после основных параметров:

if ($request_uri ~ ^[^?]*//) {
    rewrite ^ $scheme://$host$uri$is_args$args? permanent;
}

image.png.9ce569e040518abd5470c1d0da20423d.png

 

Решения представленные выше, не обрезают и не изменяют get параметров, в.т.ч UTM меток из рекламных компаний.

Спасибо за внимание. Альтернативные варианты решение, предлагайте, если они имеет место быть.

  • +1 3

8 Comments


Recommended Comments

Quote

if ($request_uri ~ "//") {
	 return 301 $uri;
}

так лучше

 

    if ($request_uri ~ ^[^?]*//) {
        rewrite ^ $uri permanent;
    }

  • +1 3
Link to comment
3 часа назад, 100napb сказал:

так лучше

 

    if ($request_uri ~ ^[^?]*//) {
        rewrite ^ $uri permanent;
    }

Спасибо, если не против, прикреплю в тексте

Link to comment
10 часов назад, ocdev_pro сказал:

Это только в случае когда сервер на Apache,

Цитата

После некоторых проверок выяснилось, что URL вида http://site.com/// или https://site.com/category////tovar/// абсолютно никак нельзя отловить в php через 

Где здесь про Апач?

 

 

10 часов назад, ocdev_pro сказал:

Думаю вот это вот все не имеет отношения к сути вопроса,

К сути - нет, но дополняет. Особенно первый слеш (без слеша)
 

 

Выдано предупреждение:

 - флуд
Наказание:

- Ограничение публикаций

  • +1 1
Link to comment
7 часов назад, ocdev_pro сказал:

В теме не рассматриваем решение на php, а только путем конфигурации веб-сервера.

Рассматриваете, но врёте:

Цитата

После некоторых проверок выяснилось, что URL вида http://site.com/// или https://site.com/category////tovar/// абсолютно никак нельзя отловить в php 


Про апач:

7 часов назад, ocdev_pro сказал:

Но 90% VPS будут использовать nginx поэтому не считаю нужным уточнять.

Но вы же выше:

Цитата

для Apache в .htaccess можно использовать код, сразу после:
RewriteBase /

Вы уж как-то определитесь, ************, чтобы людей с толку не сбивать. 

 

Выдано предупреждение:

 - флуд
Наказание:

- Ограничение публикаций

 

Link to comment
4 часа назад, Shureg сказал:

Рассматриваете, но врёте:


Про апач:

Но вы же выше:

Вы уж как-то определитесь, ***********, чтобы людей с толку не сбивать. 

Вам нужно рабочее решение или Вы предлагаете альтернативу? Тогда нечего флудить **скрыто модератором**

 

Материал рассчитан на тех кому нужно решить проблему. А не на тех, кто пришел подгавкать за своим корешом, не неся ничего полезного в своих словах.

 

  • +1 1
Link to comment

Тут вот какое дело, и гугл и яндекс в некоторых ситуациях присылают себя как источник ссылки, пример site.com?gclickid=https://google.com , и если мы бездумно будем убирать все повторяющиеся слеши, рано или поздно мы наткнемся на ситуацию, в которой порежем важные параметры, или совсем наделаем каких-нибудь соплей, поэтому корректным решением для nginx  будет вот такое правило:

 

set $test_uri $scheme://$host$request_uri;
if ($test_uri != $scheme://$host$uri$is_args$args) {
    rewrite ^ $scheme://$host$uri$is_args$args? permanent;
}


Найдено здесь:

 

https://stackoverflow.com/questions/14832780/nginx-merge-slashes-redirect

 

 

  • +1 2
Link to comment
54 минуты назад, Yoda сказал:

Тут вот какое дело, и гугл и яндекс в некоторых ситуациях присылают себя как источник ссылки, пример site.com?gclickid=https://google.com , и если мы бездумно будем убирать все повторяющиеся слеши, рано или поздно мы наткнемся на ситуацию, в которой порежем важные параметры, или совсем наделаем каких-нибудь соплей, поэтому корректным решением для nginx  будет вот такое правило:

 




set $test_uri $scheme://$host$request_uri;
if ($test_uri != $scheme://$host$uri$is_args$args) {
    rewrite ^ $scheme://$host$uri$is_args$args? permanent;
}


Найдено здесь:

 

https://stackoverflow.com/questions/14832780/nginx-merge-slashes-redirect

 

 

спасибо, на данный метод не работает для index.php (главной страницы)

Link to comment
1 час назад, ocdev_pro сказал:

спасибо, на данный метод не работает для index.php (главной страницы)

Да ладно, разобрались жеж )))

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.