【问题标题】:htaccess merge 2 segments with underscorehtaccess 用下划线合并 2 个段
【发布时间】:2019-01-21 02:12:15
【问题描述】:

我想使用下划线将 2 个片段合并为 1 个片段。

示例:
http://example.com/main/id_id/someurl
应该指向
http://example.com/main/id/id/someurl

就我对 htaccess 的理解而言,我得到了什么:

RewriteEngine On
RewriteBase /main/
RewriteCond %{REQUEST_URI} ^/main/id_id(.*)$
RewriteRule .* http://example.com/main/id/id%1 [L]

但访问http://example.com/main/id_id 只会重定向到http://example.com/main/id/id。我想知道为什么它会重定向,因为我没有使用R 标志

也很简单:

RewriteEngine On
RewriteBase /main/
RewriteRule ^main/id_id$ /main/id/id/ [L]

应该有效,但事实并非如此。任何帮助将不胜感激。

编辑:我认为这是一个 wordpress 的东西。我可以屏蔽对图像等目录的直接访问,但我不能屏蔽页面

【问题讨论】:

    标签: wordpress .htaccess


    【解决方案1】:

    但访问http://example.com/main/id_id 只会重定向到http://example.com/main/id/id。我想知道为什么它会重定向,因为我没有使用 R 标志。

    如果您在RewriteRule 中指定一个绝对 URL(即方案 + 主机名)替代,那么 Apache 将隐式触发外部 (302) 重定向,无论您是否明确包含R 标志与否。

    RewriteRule ^main/id_id$ /main/id/id/ [L]
    

    应该有效,但不是。

    WordPress 根据初始请求 URL 路由 URL(即 $_SERVER['REQUEST_URI'] PHP superglobal 的值),而不是重写的 URL。所以,是的,这是一个“WordPress 的东西”。您需要为此 URL 创建一个额外的“路由”(而不是重写它)。但是,这可能会产生重复内容等问题。

    但是,如果您要更改可能已链接到搜索引擎并被搜索引擎索引的现有 URL,那么这可能应该是 301 外部重定向,而不是内部重写。


    RewriteBase /main/
    RewriteCond %{REQUEST_URI} ^/main/id_id(.*)$
    RewriteRule .* http://example.com/main/id/id%1 [L]
    

    这可以简化为单个指令:

    RewriteRule ^main/id_id(.*) /main/id/id$1 [R,L]
    

    RewriteBase 指令在这里没有做任何事情。 RewriteBase 指令只是说明了应该用于相对路径替换的 URL 路径。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 2023-03-23
    • 1970-01-01
    • 2019-06-08
    • 2010-12-28
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多