.HTACCESS重定向问题

时间:2017-06-16 02:33:28

标签: .htaccess mod-rewrite

即,我有这个.htaccess命令......

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([^\x00-\x7F]+).*$ ?open=encyclopedia&letter=$1&term=$0 [R,B,L,QSA]
RewriteRule ^([A-Z](?:[^\x00-\x7F]+|[A-Z])?).*$ ?open=encyclopedia&letter=$1&term=$0 [R,B,L,QSA]

......我现在有两个问题:
问题1 - 它会加载所有字母的简写 A S O 。它显示空白页面而不是实际页面 问题2 - 当我输入http://example.com/Šandi (Astronomy)时,网址为http://example.com/?open=encyclopedia&letter=Š&term=Šandi+(Astronomy),而不是正常地将我重定向到http://example.com/?open=encyclopedia&letter=%25c5%25a0&term=%25c5%25a0andi+%2528Astronomy%2529换句话说:
•当我从任一规则中删除[R]标记时,速记网址(id est - example.com/A-O-S)如问题1 中所述。
•当我添加[R]标记时,它会不正确地重定向,如问题2 中所述,并且不会显示该页面。

注意: 这些问题包括英文和非英文字母(Š / Đ / ç / C / Ž)。

@anubhava建议:
带有<?php print_r($_GET); ?>标记的[R]
英语:Array([open] =&gt;百科全书[letter] =&gt; V [term] =&gt; Vodolija(Astrologija))
网址:?open =百科全书&amp; letterV&amp; term = Vodolija(Astrologija)
非英语:数组([open] =&gt;百科全书[letter] =&gt;?[term] =&gt;Škorpija(Astrologija))
网址:?open =百科全书&amp;字母=%c5&amp; term =%c5%a0korpija%20(Astrologija)

没有<?php print_r($_GET); ?>旗帜的[R]
英语:Array([open] =&gt;百科全书[letter] =&gt; V [term] =&gt; Vodolija(Astrologija))
网址:/ Vodolija(Astrologija)
非英语:数组([open] =&gt;百科全书[letter] =&gt;Š[term] =&gt;Škorpija(Astrologija))
网址:/Škorpija(Astrologija)

至于索引页面:
A - 数组([open] =&gt;百科全书[letter] =&gt; A [term] =&gt; A):它不显示页面,显示空白页面。
O - 数组([open] =&gt;百科全书[letter] =&gt; O [term] =&gt; O):它不显示页面,显示空白页面。
S - 数组([open] =&gt;百科全书[letter] =&gt; S [term] =&gt; S):它不显示页面,显示空白页面。
至于所有其他索引页面,URL是数组([open] =&gt;百科全书[letter] =&gt; AnyLetter [term] =&gt; SameAnyLetter):它正确显示页面......我不知道看其中的逻辑。

这是新代码:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
#1 RewriteRule ([A-Z](?:[^\x00-\xFF].|\w).*) ?open=encyclopedia&letter=$2 [R,B,NE,L,QSA] # it loads DZH, but not the rest
#2 RewriteRule (([\x00-\xFF].|\w).*) ?open=encyclopedia&letter=$2 [R,B,NE,L,QSA] # it loads A-O-S and it loads DJ-ZH-LJ-NJ-SH
RewriteRule ^([A-Z](?:[^\x00-\x7F]+|[A-Z])?).*$ ?open=encyclopedia&letter=$1&term=$0 [B,NE,L,QSA]

当我删除第1行时,第2行正常工作。当我删除第2行时,#1行正常工作。但他们不会一起工作。 第2行显示除DŽ以外的所有字母,并正确重定向。 第1行正确显示字母DŽ,不会重定向,也不会加载其余部分。 启用第2行后,带有/DŽ的网址会重定向到/?open=encyclopedia&letter=D%c5

更新#6:

使用以下代码......

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ((LJ).*) ?open=encyclopedia&letter=$2&term=$1 [R,NE,L,QSA]
RewriteRule ((NJ).*) ?open=encyclopedia&letter=$2&term=$1 [R,NE,L,QSA]
RewriteRule ((D\xC5\xBD).*) ?open=encyclopedia&letter=$2&term=$1 [R,NE,L,QSA]
RewriteRule (([\x00-\xFF].|\w).*) ?open=encyclopedia&letter=$2&term=$1 [R,NE,L,QSA]

......发生这种情况:
•INDEX页面:对于“双字母”字母,它会正确打开每个字母。从单个字母开始,它会加载除 A O S 之外的所有字母。
•TERM页面:考虑到它不会打开 A O S ,因此它不会打开其条款页面。
/Lav (Astrologija)未重定向到/?open=encyclopedia&letter=L&term=Lav (Astrologija),而是重定向到/?open=encyclopedia&letter=L&term=Lav+%2528Astrologija%2529,因此无法打开正确的页面。
•它正确打开,并将/Škorpija (Astrologija)正确重定向到/?open=encyclopedia&letter=Š&term=Škorpija (Astrologija)
•它正确打开,并将/Đavo正确重定向到/?open=encyclopedia&letter=Đ&term=Đavo
•虽然正确打开/U/Unuk Al Haj会重定向到/?open=encyclopedia&letter=Un&term=Unuk%20Al%20Haj,而不会打开正确的页面。
•虽然正确打开/U/Ugaoni Razmak会重定向到/?open=encyclopedia&letter=Ug&term=Unuk%20Al%20Haj,而不会打开正确的页面。
•虽然正确打开/R/Ribe (Astrologija)会重定向到/?open=encyclopedia&letter=Ri&term=Ribe (Astrologija),而不会打开正确的页面。
•虽然正确打开/V/Vaga (Astrologija)会重定向到/?open=encyclopedia&letter=Va&term=Vaga (Astrologija),而不会打开正确的页面。
•虽然正确打开/U/Umerenost会重定向到/?open=encyclopedia&letter=Um&term=Umerenost,而不会打开正确的页面。
•虽然它正确打开/K,但/Kuće (Astrologija)重定向到/?open=encyclopedia&letter=Ku&term=Kuće (Astrologija),而不是打开正确的页面。

2 个答案:

答案 0 :(得分:1)

使用NE(无逃脱)标志:

# here are all 2 letters which we count as 1

RewriteRule ((D\xC5\xBD).*) ?open=encyclopedia&letter=$2&term=$1 [R,NE,L,QSA] # C5 BD is utf8 encoding of Ž
RewriteRule ((LJ).*) ?open=encyclopedia&letter=$2&term=$1 [R,NE,L,QSA]
RewriteRule ((NJ).*) ?open=encyclopedia&letter=$2&term=$1 [R,NE,L,QSA]

# one letter
RewriteRule (([\x80-\xFF].|\w).*) ?open=encyclopedia&letter=$2&term=$1 [R,NE,L,QSA]

答案 1 :(得分:0)

在我看来,你应该可以使用:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^(.)[^/]*$ ?open=encyclopedia&letter=$1&term=$0 [L,QSA]