如何使用.htaccess将子目录的所有URL重写为根URL?

问题描述 投票:0回答:1

努力获得

https://example.com/es/[path]

直接前往

https://example.com/[path]

我尝试了多段代码,但没有任何效果。

我尝试过的:

RewriteEngine on
RewriteRule ^/es/$ /$1 [L,R=301]

上面的内容总是将我重定向到主页。 我做错了什么?

.htaccess redirect mod-rewrite
1个回答
0
投票

您当前的实施存在一些问题,这就是为什么我怀疑您发布的这条规则实际上是“重定向到主页”:

  1. RewriteRule
    内的匹配模式与所请求URL的relative路径相匹配。这是有记录的。由于前导斜杠,您的模式
    ^/es/$
    永远不会匹配相对路径。

  2. 您在该模式中没有捕获任何内容,这就是为什么

    $1
    永远不会在目标定义中包含任何内容。

  3. 该模式仅匹配exact字符串

    /es/
    ,而不是包含像
    /es/[path]
    这样更长的内容,因为使用了
    $
    将模式锚定到主题末尾。

尝试一下:

RewriteEngine on
RewriteRule ^/?es/(.*)$ /$1 [L,R=301]

您可以在 http 服务器虚拟主机设置的集中配置中实施此类规则。如果您无权访问该文件(例如,如果您使用廉价的托管提供商而不是自己操作 http 服务器),您可以使用 distributed 配置文件(通常称为“.htaccess”),尽管该文件附带一些缺点。您必须首先在 http 服务器的配置中启用此类文件的解释(请参阅

AllowOverride
指令的文档)。

我强烈建议您查看您正在尝试使用的工具的文档,这里是 apache http 服务器的重写模块。作为典型的开源软件,它具有卓越的品质,并且附带有用的示例:https://httpd.apache.org/docs/current/mod/mod_rewrite.html

© www.soinside.com 2019 - 2024. All rights reserved.