Перезапись URL без ущерба для функций ajax - PullRequest
3 голосов
/ 16 апреля 2019

Я делаю объявления на сайте. При этом мне нужно загрузить одно объявление без параметров URL. Я сделал это с параметрами URL успешно. Теперь я хочу удалить параметры из URL. Я сохранил URL-слаг, который создан для экономии времени рекламы в базе данных. Во время загрузки страницы объявления вызывается много функций. Эти функции запрашивают данные из базы данных в соответствии со значением параметра URL. Я попробовал с правилами htaccess. Но остальная часть страницы и детали загружаются как прежде. Но функции ajax, называемые данными, которые должны отображаться в тегах div, не работают. Они показывают целую страницу внутри этих элементов.

До сих пор я пытался следовать правилам htaccess.

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f [NC]
RewriteRule ^ %{REQUEST_URI}.php [L]

ReWriteRule ^ad/([a-zA-Z0-9-/]+)$ ad.php?url=$1
ReWriteRule ^ad/([a-zA-Z0-9-/]+)/ ad.php?url=$1

Теперь я покажу образец моей функции.

  function load_reviews(){
        var id = "<?php echo $ad->get_ad_id($unique_ad_url) ?>";
        $.ajax({
            url: './middle/review/load_reviews',
            cache:true,
            type: 'GET',
            async: false,
            data:{
                id: id
            },
            success: function(response){
                $('#chat_area').html(response);
            },
            error: function (x, e) {
                if (x.status == 0) {
                    console.log('You are offline!! -  Please Check Your Network.');
                } else if (x.status == 404) {
                    console.log('Requested URL not found.');
                } else if (x.status == 500) {
                    console.log('Internal Server Error.');
                } else if (e == 'parsererror') {
                    console.log('Error. - Parsing JSON Request failed.');
                } else if (e == 'timeout') {
                    console.log('Request Time out.');
                } else {
                    console.log('Unknown Error. - ' + x.responseText);
                }
            }
        });
        return false;

    }

В верхней части файла ad.php я включаю эти строки кода, чтобы захватить последнюю часть URL и сохранить ее в переменной.

$url=$_SERVER['REQUEST_URI'];
//echo $url;
$unique_ad_url = basename(parse_url($url, PHP_URL_PATH));

Аналогично в функциях JavaScript я передал ad_id для извлечения его в ajax, чтобы получить релевантные данные для текущей страницы просмотра объявления.

На странице со списком объявлений я показывал объявления с их URL. Это делается, как показано ниже,

<a href="ad/'.$this->url_slug($ad['AD_URL']).'" class="card all-card">

Подробнее => Когда я вижу сетевые ответы от инструментов разработки chrome, он показывает бесконечную загрузку одних и тех же css, js, других внешних библиотечных файлов и функции ajax, называемой откликами рекурсивно. Также он добавил параметр id в конец URL-адреса ajax.

В верхней части файла ad.php я выводю $unique_ad_url, чтобы увидеть значение. Он также показывает внутри всех div, которые должны показывать только восстановленные данные. Как я уже упоминал выше, вместе со всей страницей объявления это показывает значение эха.

В конце я хочу, чтобы загруженные ajax-значения без проблем отображались на странице объявления. И URL, как ожидается, будет как, http://ads.com/ad/daihatsu-boon-m700s-new-2016-2019-04-05-22-49-04 Я ценю вашу помощь в этом вопросе.

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Попробуйте это правило в вашем .htaccess:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
ReWriteRule ^ad/([\w-]+)/?$ ad.php?url=$1 [L,NC,QSA]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
1 голос
/ 16 апреля 2019

эй, я тоже столкнулся с этой проблемой.Вы можете получить помощь от этого.

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f [NC]
RewriteRule ^ %{REQUEST_URI}.php [L]

ReWriteRule ^ad/([a-zA-Z0-9-/]+)$ ad.php?url=$1
ReWriteRule ^ad/([a-zA-Z0-9-/]+)/ ad.php?url=$1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...