Работещ url адрес дава 404 при опит за директен достъп?

bogdandimitrov

New Member
Здравейте колеги,
дано това да е правилното място за тази тема и някой да успее да помогне.

Имаме следния казус.
Ако сте в сайта и натискате линкове на сервизи - работят без проблем. Например ако се опитате да отворите сериеза - „Термодинамика“ ООД от тази страница:
http://bgr.bg/дистрибутори-сервиз/business-place/българия/пазарджик/
Сервиза се отваря.
както ще видите url адресът ми е - /http://bgr.bg/дистрибутори-сервиз/термодинамика-оод-2/ - и статуса е 200
ако обаче поставите този адрес в нов прозорец, за да го отворите директно - дава грешка 404
Сега ако изтриете последната / - пак ще зареди страницата и ще допише / в края но вече статуса е 301

Лошото е че и Google Search Console - маркира всички тези адреси като 404, а те са около 600

За сервизите е използван плъгин Web 2.0 Directory plugin for WordPress - но аз нямам код за достъп до съпорт, защото плъгина е инсталиран от програмиста на сайта, който се е покрил и отказва да съдейства.

Благодаря предварително на всеки, който може да помогне.
 
Последно редактирано:
:D Много секси модулче си имате май. Моята хипотеза е, че адресите са записани в базата енкоднати, което автомат спира шестнадесетичните стойности D0 примерно, но пуска d0, което е аналог.
адрес, който върви:
и който не върви:
Открийте разликите ;)
ПП форума автомат декодва УРЛ-тата :)
 
Не ми се редактира предното мнение, но се вижда в конзолата на браузъра, след като инспектнеш елемента (урл-то)
 
Всичко казано ми звучи .логично.
Но какво е решението?
Бихте ли ми казали каква функция да търся в кода на плъгина?
Там има някакви функции за пренаписване на адресите, като например:

Код:
public function listing_permalink($permalink, $post, $leavename) {
        if ($post->post_type == W2DC_POST_TYPE) {
            global $wp_rewrite;
            if ($wp_rewrite->using_permalinks()) {
                if ($leavename)
                    $postname = '%postname%';
                else
                    $postname = $post->post_name;

                switch (get_option('w2dc_permalinks_structure')) {
                    case 'post_id':
                        return w2dc_directoryUrl($post->ID . '/' . $postname);
                        break;
                    case 'postname':
                        if (get_option('page_on_front') == $this->index_page_id)
                            return w2dc_directoryUrl($post->ID . '/' . $postname);
                        else
                            return w2dc_directoryUrl($postname);
                        break;
                    case 'listing_slug':
                        if (get_option('w2dc_listing_slug'))
                            return w2dc_directoryUrl(get_option('w2dc_listing_slug') . '/' . $postname);
                        else
                            if (get_option('page_on_front') == $this->index_page_id)
                                return w2dc_directoryUrl($post->ID . '/' . $postname);
                            else
                                return w2dc_directoryUrl($postname);
                        break;
                    case 'category_slug':
                        if (get_option('w2dc_listing_slug') && get_option('w2dc_category_slug') && ($terms = get_the_terms($post->ID, W2DC_CATEGORIES_TAX))) {
                            $term = array_shift($terms);
                            if ($cur_term = w2dc_get_term_by_path(get_query_var('category-w2dc'))) {
                                foreach ($terms AS $lterm) {
                                    $term_path_ids = w2dc_get_term_parents_ids($lterm->term_id, W2DC_CATEGORIES_TAX);
                                    if ($cur_term->term_id == $lterm->term_id) { $term = $lterm; break; }  // exact term much more better
                                    if (in_array($cur_term->term_id, $term_path_ids)) { $term = $lterm; break; }
                                }
                            }
                            $uri = '';
                            if ($parents = w2dc_get_term_parents_slugs($term->term_id, W2DC_CATEGORIES_TAX))
                                $uri = implode('/', $parents);
                            return w2dc_directoryUrl(get_option('w2dc_listing_slug') . '/' . $uri . '/' . $postname);
                        } else
                            if (get_option('page_on_front') == $this->index_page_id)
                                return w2dc_directoryUrl($post->ID . '/' . $postname);
                            else
                                return w2dc_directoryUrl($postname);
                        break;
                    case 'location_slug':
                        if (get_option('w2dc_listing_slug') && get_option('w2dc_location_slug') && ($terms = get_the_terms($post->ID, W2DC_LOCATIONS_TAX)) && ($term = array_shift($terms))) {
                            if ($cur_term = w2dc_get_term_by_path(get_query_var('location-w2dc'))) {
                                foreach ($terms AS $lterm) {
                                    $term_path_ids = w2dc_get_term_parents_ids($lterm->term_id, W2DC_LOCATIONS_TAX);
                                    if ($cur_term->term_id == $lterm->term_id) { $term = $lterm; break; }  // exact term much more better
                                    if (in_array($cur_term->term_id, $term_path_ids)) { $term = $lterm; break; }
                                }
                            }
                            $uri = '';
                            if ($parents = w2dc_get_term_parents_slugs($term->term_id, W2DC_LOCATIONS_TAX))
                                $uri = implode('/', $parents);
                            return w2dc_directoryUrl(get_option('w2dc_listing_slug') . '/' . $uri . '/' . $postname);
                        } else {
                            if (get_option('page_on_front') == $this->index_page_id)
                                return w2dc_directoryUrl($post->ID . '/' . $postname);
                            else
                                return w2dc_directoryUrl($postname);
                        }
                        break;
                    case 'tag_slug':
                        if (get_option('w2dc_listing_slug') && get_option('w2dc_tag_slug') && ($terms = get_the_terms($post->ID, W2DC_TAGS_TAX)) && ($term = array_shift($terms))) {
                            return w2dc_directoryUrl(get_option('w2dc_listing_slug') . '/' . $term->slug . '/' . $postname);
                        } else
                            if (get_option('page_on_front') == $this->index_page_id)
                                return w2dc_directoryUrl($post->ID . '/' . $postname);
                            else
                                return w2dc_directoryUrl($postname);
                        break;
                    default:
                        if (get_option('page_on_front') == $this->index_page_id)
                            return w2dc_directoryUrl($post->ID . '/' . $postname);
                        else
                            return w2dc_directoryUrl($postname);
                }
            } else
                return w2dc_ListingUrl($post->post_name);
        }
        return $permalink;
    }

В настройките на плъгина е зададено да използва %%postname%%
 
Така надали ще мога да помогна, може би ще се включи някой, който се занимава с УП. Не се изискват кой знае какви умения да се пренапише логиката за запис/четене на УРЛ-тата.
 
Благодаря hristonev
Аз не съм такъв програмист, че да се справя сам. И аз предположих, че е заради генерирането на адресите, но не стигнах и до твоя извод.
Дано някой друг колега се включи с решение.
Ако трябва ще копирам всички файлове на плъгина, за да може някой да тества.
Благодаря още веднъж.
 
Направи си архив на файловете и базата данни и инсталирай си този модул Cyr to Lat enhanced и опитай отново

Да подчертая, че този плъгин автоматично конвертира url кирилицата на латиница.

Най-вероятно имаш някакъв конфликт с permalinks
 
Съветвам те да работиш с url адреси на латиница. По-късно ще потърся плъгин, който автоматично да ти пренасочи кирилизираните адреси към конвертираните на кирилица, за да не ти пада сео-то
 
Е аз никога не съм харесвал адреси на кирилица. Макар че те не са такъв проблем, ако си добър програмист и имаш време за губене в ненужни проблеми.
Преди използвах wp-cyr-cho - това беше първия плъгин, който инсталирам когато правя WP сайт.
Но този сайт го наследих.
Оправих значителен брой бъгове и некоректни адреси замазани при предаването на проекта. Остана проблема с този плъгин.

Търся решение и в Интернет, но уви.
Даже си правих експерименти с кода на плъгина, но за сега реших да спра преди да го счупя съвсем. :)

Сега честно казано предпочитам някой да помогне за решаването на проблема с този плъгин и неговите url адреси.
Затова стигнах до този форум.

Все пак ти благодаря AeonSpoke за съпричасността и предложението.
 
Направи си един backup и пробвай варианта, който ти казах..

П.с. плъгина ти лицензиран ли е ?
 
Ами би трябвало да е лицензиран.
Сайтът е програмиран от фирма за фирма.

Аз лично не бих си позволил да използвам плъгин свален от руснаците или друго място, дори и за моя си сайт - но не всеки мисли така - така че нямам идея.

В настройките на плъгина доколкото си спомням не видях да има поле за лицензен код, за да видя дали е попълнено.


А иначе за твоето решение - сигурен съм на 99% че ще работи.
 
Имах същия проблем и го реших с добавка за Redirect 301, а може и директно в htaccess файла да се добави пренасочването на тази страница, Уловката е наистина в енкодването и директно копирания от браузъра линк, въпреки работещ не може да се редиректне правилно. От админ панела и там "Страници" или "Публикации" има линк за редактиране, триене и линк към самата публикация, Копирай оттам линка на съотвентата публикация, тя е правилната. Т.е. тази в браузъра да води с 301 към копирания линк от wp панела. Така ми се прецака една страница, за която разбрах от конзолата на Гугъл за грешки. В резултатите от търсене връзката водеше към 404, аналогичен проблем. Интересно, че само за една или 2-3 страници беше това, а имам доста на кирилица. Тук обаче говориш за 600 адреса...
Виж самата ти база в какъв енкодинг е наистина, ако е UTF8 и PHP файла ти с гореспоменатия код е същия, пробвай utf8 without BoM примерно.
 
Имах същия проблем и го реших с добавка за Redirect 301, а може и директно в htaccess файла да се добави пренасочването на тази страница, Уловката е наистина в енкодването и директно копирания от браузъра линк, въпреки работещ не може да се редиректне правилно. От админ панела и там "Страници" или "Публикации" има линк за редактиране, триене и линк към самата публикация, Копирай оттам линка на съотвентата публикация, тя е правилната. Т.е. тази в браузъра да води с 301 към копирания линк от wp панела. Така ми се прецака една страница, за която разбрах от конзолата на Гугъл за грешки. В резултатите от търсене връзката водеше към 404, аналогичен проблем. Интересно, че само за една или 2-3 страници беше това, а имам доста на кирилица. Тук обаче говориш за 600 адреса...
Виж самата ти база в какъв енкодинг е наистина, ако е UTF8 и PHP файла ти с гореспоменатия код е същия, пробвай utf8 without BoM примерно.

Това с редиректаите - не ми се иска да го правя. това не е решене за 600 линка.
Базата си е UTF-8 ще пробвам да енкодна файла на плъгина, макар че във файла няма кирилица.
Има инсталиран плъгин за редиректи. Той общо взето се справя с кирилицата, но не на 100%.
Пак казвам според мен по-правилно е да се оправи кода на този плъгин.
 
Писал си, че пермалинка ти %%postname%%, а в кода е с едно %?

Ами предполагам че за кода трябва да е с %, а това което се вижда в админа като опция за избор е с %% по подобие на настройката в WP. То реално в админа е като етикет на чек-бокс. А не е зададено като променлива както са пермалинковете на WP.
 
Направи си архив на файловете и базата данни и инсталирай си този модул Cyr to Lat enhanced и опитай отново

Да подчертая, че този плъгин автоматично конвертира url кирилицата на латиница.

Най-вероятно имаш някакъв конфликт с permalinks

Понеже по някъква странно извратен логика програмиста е решил да прави 2 сайта - отделна инсталация за всеки език. Така че проблема с този плъгин стои и в английската версия.
Реших там да тествам Cyr to Lat enhanced. Защото там пък съвсем не ми трябват адреси на кирилица.
В момента в който го инсталирах - всичко замина. Адресите станаха латиница, но този плъгин нито има настройки нито какъвто и да е начин да видя кой адрес как се е променил, за да мога да ги редиректвам. Пише, че си пазел старите адреси - но къде и какъв е ефекта от това че ги пази - няма обяснения.
На всичкото отгоре като го деактивирах - адресите си останаха на латиница и единствения начин за връщане на предишното състояние беше - възстановяване на базата и файловете от резервно копие на хостинга.
щеше да е добро решение ако подобен плъгин освен че транлитерира адресите - записва и редирект към новия. Но точно този плъгин не прави това.
Споделям теста за да не се излъже някой друг да го инсталира на работещ сайт и да изпадне в паника :)
 
Моят проблем беше подобен и когато този плъгин ми конвертира адресите на латиница всичко се оправи. Но аз заради това ти казах да си направиш пълен архив на файлове и база данни, за да няма сърдити после. Тестваш и ако стане - супер. Ако не стане - връщаш си нещата по старому
 

Горе