使用.htaccess重写从URL中省略“public”

时间:2015-05-01 17:04:27

标签: regex apache mod-rewrite

我有一个当前的REST API,其中URL过去如下所示:

#include <fstream>
#include <iostream>
#include <string>

int main() {
    // Read entire file into a single string.
    std::ifstream file_stream("text.txt");
    std::string file_contents(std::istreambuf_iterator<char>(file_stream),
        std::istreambuf_iterator<char>());

    unsigned count = 0;
    std::string substr = "USER";
    for (size_t i = file_contents.find(substr); i != std::string::npos;
        i = str.find(substr, i + substr.length())) {
        ++count;
    }
}

我已将网址结构更新为:

example.com/public/products
example.com/public/products/123

问题是此REST API的当前用户只能连接到“公共”URL,因此此更新会给他们404错误。如何向我的重写添加规则,以便在没有“公共”的情况下处理带有“公共”的URL的GET请求。

example.com/products
example.com/products/123

如何为我编写一个重写规则呢?

1 个答案:

答案 0 :(得分:0)

<强> htaccess的:

RewriteEngine On
RewriteRule ^public/(.*)$ $1 [R=301,L]

您可以在此处进行测试:http://htaccess.madewithlove.be/

正则表达式:

^
匹配字符串的开头(在这种情况下为URL路径)。

public/
匹配字符串&#34; public /&#34;。

(.*)
括号使这成为一个捕获组; .匹配除换行符之外的任何字符; *匹配前面标记的零个或多个。

$
匹配字符串的结尾。

输出网址(包含捕获组参考号):

$1:插入捕获组#1的内容

选项:

[R=301,L]:执行301 [R]edirect并指出这是[L] ast规则,从而立即停止重写过程。

Apache Module mod_rewrite文档:http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html