htaccess将2个句段与下划线合并

时间:2019-01-16 08:15:21

标签: wordpress .htaccess

我想使用下划线将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的事情。我可以屏蔽直接访问图像等目录,但不能屏蔽页面

1 个答案:

答案 0 :(得分:1)

  

但是访问http://example.com/main/id_id只会重定向到http://example.com/main/id/id。我想知道为什么为什么不使用R标志进行重定向。

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

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

应该可以,但是不能。

WordPress根据初始请求URL(即  $_SERVER['REQUEST_URI'] PHP超全局性的值),而不是重写的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路径。