重写规则 - 如何仅排除单个深度?

时间:2018-04-23 11:33:32

标签: php wordpress .htaccess url-rewriting

在我的functions.php中我有重写规则,不包括以数字开头的字符串(如果我理解正确的话)所以现在如果我有链接$ slug / 123anything /它排除它 - 代码:

add_rewrite_rule(
        "^$slug/(?![\d]+\-)(.+)$",
        'index.php?post_type=xxx',
        'top'
    );

但我需要的是同样的规则,只排除单个字符串/文件夹深度 - 例如,如果链接是$ slug / anything /或$ slug / 123anything / - 它应该被排除但是如果链接是$ slug / anything / anything或$ slug / anything / anything / ...然后它应该重写。

我尝试了这段代码和一些变化,但没有运气

add_rewrite_rule(
        "^$slug/(?!(\w+)/?$)(.+)$",
        'index.php?post_type=xxx',
        'top'
    );

我也尝试过代码,但是在所有情况下都没有 - 当我在第一个字符串/文件夹深度($ slug / anything / anything)之后进行单个查询时,它无法正常工作,但是如果我有两个或更多深度( $ slug / anything / anything / anything ...)它运行正常。

add_rewrite_rule(
        "^$slug/(?![.+]/$)(.+)/(.+)$",
        'index.php?post_type=xxx',
        'top'
    );

如果有帮助 - 应该重写的网址有查询字符串,并且始终以数字结尾(最后没有/)。所以也许好的方法是尝试不排除,但只有当链接有查询sting或以数字结尾而没有“/".

时重写

如果有任何帮助和建议,我将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

为了防止遇到类似问题的人,我找到了解决方案以检查URL是否包含查询字符串,如果是,则应用重写规则,在我的情况下,它完美无缺。

  public download(id: string): Observable<any> {
    //let oReq = new XMLHttpRequest();
    // let options = new RequestOptions({ responseType: ResponseContentType.Blob });
    let params = new URLSearchParams();
    let headers = new Headers();
    headers.append('x-access-token', this.auth.getCurrentUser().token);
    headers.append('sale_id', id);
    headers.append('Content-Type', 'application/json;charset=UTF-8');
    headers.append('responseType':'arraybuffer');
    return this.http.get(Api.getUrl(Api.URLS.download), {
      headers: headers,
      responseType: ResponseContentType.Blob,

    }).map(res => res.blob()) 
  }