如何减少我网站上301重定向的数量。
有几条说明:
RewriteRule 11 12 [R=301,L,QSA]
RewriteRule 21 22 [R=301,L,QSA]
RewriteRule 31 32 [R=301,L,QSA]
RewriteRule 41 42 [R=301,L,QSA]
我想这样做:
RewriteRule 11 12 [QSA,E=RCODE:301]
RewriteRule 21 22 [QSA,E=RCODE:301]
RewriteRule 31 32 [QSA,E=RCODE:301]
RewriteRule 41 42 [QSA,E=RCODE:301]
RewriteCond %{ENV:RCODE} =301
RewriteRule . - [R=301,L,QSA]
最后RewriteRule
应该是什么?从.
重定向到-
并未更改原始网址!
答案 0 :(得分:0)
如果网址格式与发布时相符(11 => 12; 21 => 22),则可以执行以下操作:
RewriteRule ^/?(\d)1$ $12 [R=301,L,QSA]
所以第一个数字保持不变,但如果第二个数字保持1
,我们将重定向到目的地,第二个数字是2
。
答案 1 :(得分:0)
最后
RewriteRule
应该是什么?
由于URL路径(RewriteRule
模式匹配)在处理前面的RewriteRule
指令时更新,因此您可以捕获当前的URL路径和在替换中使用它。例如:
RewriteRule (.*) /$1 [R=301,L,QSA]
在替换中使用单个-
(连字符)用于"传递",当URL未更改时(如您所见)。
一个工作示例:
RewriteBase /
RewriteRule 11 12 [E=RCODE:302]
RewriteRule 21 22 [E=RCODE:302]
RewriteRule 31 32 [E=RCODE:302]
RewriteRule 41 42 [E=RCODE:302]
RewriteCond %{ENV:RCODE} !^$
RewriteRule (.*) /$1 [R=${ENV:RCODE},L]
这使用前面指令设置的任何代码(301,302,303等),并且只在设置了代码时才处理最后的重写。
(使用302 - 临时 - 重定向到测试有助于避免缓存问题。)
然而,这是一个非常假设的"例。在这种情况下,只需删除第一个示例中的L
标记,即可获得相同的结果,代码更少。但是,你的第一个例子 - 带有L
标志 - 是这个"非常假设的#34;中最好的(最有效的)方法。例! (因为在这个例子中,最多只有1个重定向,L
标志可以防止以下指令被不必要地处理。)
因此,由于问题中的信息量有限,以这种方式进行操作并没有多大意义。如果您首先用自然语言描述问题,那么可能有更好的方法来解决这个问题。就目前而言,它看起来像XY problem。