【问题标题】:htaccess redirect subdirectories to upper levelhtaccess 将子目录重定向到上层
【发布时间】:2017-02-21 16:11:33
【问题描述】:

我可以添加什么规则来获得以下结果?

url 中包含“/manufacturer/any symbols”的任何子文件夹只需重写到上层,例如

domain.net/catalog/file/manufacturer/?categorylayout=0&showcategory=1&showproducts=1&productsublayout=0

domain.net/catalog/file/

Htaccess

RedirectMatch 301 ^/manufacturer/ / 

不会工作。它应该从 url 末尾删除 GET 参数,并且 QSD 标志会导致 500 错误。

【问题讨论】:

    标签: .htaccess redirect mod-alias


    【解决方案1】:

    我想这就是你要找的:

    RewriteEngine on
    RewriteRule ^/?(.+)/manufacturer/ /$1/ [R=301,QSD]
    

    如果加载了重写模块,这将在 http 服务器主机配置或动态配置文件 (.htaccess) 中起作用。

    如果您决定使用动态配置文件的解释,则必须启用它。在这种情况下,该文件应该放在您的 http 服务器 DocumentRoot 文件夹中。


    您的描述在一个小细节上自相矛盾:在描述中您说“/制造商/任何符号”,但该示例显示的 URL 没有此类符号(请注意,不考虑 GET 参数 URL 的一部分)。因此,根据您的确切要求,上述规则可能需要稍作修改......


    还有一个一般提示:您应该始终喜欢将此类规则放在 http 服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。众所周知,这些文件容易出错,难以调试,而且它们确实会降低服务器的速度。它们仅在您无法控制主机配置的情况下(阅读:非常便宜的托管服务提供商)或如果您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦)提供它们作为最后一个选项)。

    【讨论】:

    • QSD - 标志导致 500 服务器错误,并且 RewriteRule ^/?(.+)/manufacturer/ /$1/ [R=301,L] - 留下查询字符串 =(((
    • @YuryZheve 外部重定向不需要 L 标志,并且需要 QSD 来删除 GET 参数,因为 QSA 是默认值 (AFAIK)。该标志有据可查,不知道为什么它会在您的系统上引发错误。
    • @YuryZheve 啊,我只看到这个标志只存在于 2.4 版以后,所以很可能你使用的是一个非常旧版本的 http 服务器......你可以用它来解决:@ 987654324@.
    猜你喜欢
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多