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