是否可以为所有前端 AJAX 请求设置路径

Is it possible to set the path for all frontend AJAX request

我的鼻涕虫是这样的:

'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '<lang>/<p_page>/<p_category>/<p_product>' => 'splitter/manage-request',
                '<lang>/<p_page>/<p_category>' => 'splitter/manage-request',
                '<lang>/<p_page>' => 'splitter/manage-request',
                '<lang>/' => 'splitter/manage-request',
                '<lang>' => 'splitter/manage-request',
                '' => 'splitter/manage-request',
            ],
        ],

我将所有请求发送到我正在解析它们的 SplitterController。但我不希望将 AJAX 发送给它。是否可以给他们一些默认路由?例如,将它们重定向到后端。我在文档中找不到有关它的信息?感谢链接也是我错过的。谢谢!

根据我的经验,大概有以下几种方案供大家参考:

第一种:最简单的方法是在你的SplitterController中添加一个beforeAction(),在beforeAction()中判断是否是一个ajax请求,然后重定向到你的目标地址,例如:

public function beforeAction() 
{
    if (\Yii::$app->request->isAjax) {
        return \Yii::$app->response->redirect($targetUrl);
    }
    return parent::beforeAction($action);
}

其二:可以在nginx配置中查看请求是否为ajax请求,然后重定向到你的目标地址

第三:如果不能设置额外的路由规则和配置ajax请求地址,那么可以考虑通过自定义UrlManager::parseRequest()来实现,只要检查是否是一个ajax 在开始解析请求之前请求,然后重定向到您的目标。地址

此答案翻译自Google翻译