即,我有这个.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)
,而不是打开正确的页面。
答案 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]