【问题标题】:URL re-writing without affecting ajax functionsURL 重写而不影响 ajax 功能
【发布时间】:2019-09-06 20:39:25
【问题描述】:

我正在制作分类广告网站。因为我需要加载一个没有 URL 参数的广告。我成功地使用了 URL 参数。现在我想从 URL 中删除参数。我存储了 URL-slug,它是在数据库中构建节省广告时间的。在广告页面加载时,调用了许多函数。这些函数根据 URL 参数值从数据库中请求数据。我尝试使用 htaccess 规则。但是页面的其余部分和详细信息会像以前一样加载。但是应该在 div 标签上显示的名为 data 的 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 获取当前查看广告页面的相关数据。

在广告列表页面中,我展示了带有其网址的广告。这是通过如下方式完成的,

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

更多 => 当我看到来自 chrome 开发工具的网络响应时,它显示无限加载相同的 css、js、其他外部库文件和称为响应的 ajax 函数。它还在 ajax URL 的末尾添加了 id 参数。

在 ad.php 文件的顶部,我回显 $unique_ad_url 以查看价值。它还显示在所有应该只显示检索到的数据的 div 中。正如我上面提到的以及整个广告页面,它显示了回声值。

最后,我希望加载 ajax 检索到的值显示在广告页面上,而不会出现此类问题。而 URL 预计会是这样的, http://ads.com/ad/daihatsu-boon-m700s-new-2016-2019-04-05-22-49-04 感谢您对这个问题的帮助。

【问题讨论】:

    标签: .htaccess url url-rewriting


    【解决方案1】:

    在您的 .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]
    

    【讨论】:

    • 使用 url 参数查看来自 chrome 开发工具的请求时,我的 ajax 请求 url 看起来像 http://ads/middle/review/load_reviews。所以在用我的 .htaccess 替换你的代码后,我得到了 500 服务器错误。然后我的相同请求看起来像http://ads/ad/middle/review/load_reviews。我的特定广告页面是 ad.php。删除 url 参数后,我必须将页面名称保留为 ad 你有什么建议吗?
    • 好的,我发现了问题。那是因为我错过了来自 ajax 请求 url 的.。谢谢你的回答。它帮助了我:)
    【解决方案2】:

    嘿,我也遇到过这个问题。您可能会从中获得帮助。

    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
    

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 2016-06-03
      • 2015-02-09
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 2017-06-30
      相关资源
      最近更新 更多