子目录的URL重写而不更改基数

时间:2017-09-21 09:09:25

标签: php apache .htaccess mod-rewrite url-rewriting

我想重写以下网址:

    public void SaveFile(HttpListenerContext context)
    {
        // Get the data from the HTTP stream
        var body = new StreamReader(context.Request.InputStream).ReadToEnd();

        var xmlDocument = new XmlDocument();
        xmlDocument.LoadXml(body);
        xmlDocument.Save("Settings.xml");
    }

要:

https://www.example.com/tools/tool.php?id=predict-backlinks

正如此处所示:URL Rewriting for sub-folder

现在工作网址为https://www.example.com/tools/predict-backlink

以下代码工作正常,但{URL}中添加了https://www.example.com/tools/tool/predict-backlink。我希望它在URL中没有tool的情况下工作。

tool

1 个答案:

答案 0 :(得分:0)

此规则应该为您完成:

RewriteEngine On
RewriteCond %{QUERY_STRING} id=(.+) [NC]
RewriteRule ^(.*)$ https://www.example.com/tools/%1? [R=301,NC,L]

这样做会抓住您的查询id=,并且使用RewriteRule会使用%1将其附加到您网址的末尾。

?可以阻止原始查询出现在最后。整个重写使用301重定向完成。

确保在>测试之前清除缓存

修改

感谢您更新问题,现在更清楚了。它添加tool/的原因是因为RewriteRule前缀^tool/(.*)的这一部分。你自己添加它。

只需从RewriteRule中删除tool/即可,无需添加tool即可。

RewriteRule ^(.*) tool.php?id=$1 [L]