2017-06-16 147 views
0

也就是说,我有这样的.htaccess命令的.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,SO。它显示空白页面而不是实际页面。
问题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]标志,速记URL(id est-example.com/A-O-S)如第1期中所述。
•当我加入[R]标志,它重定向不当,如第2期描述,并且显示的页面。

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

作为@anubhava建议:
<?php print_r($_GET); ?>[R]标志:
英文:阵列([开] =>百科全书[信] => V [术语] => Vodolija(Astrologija))
URL:开=百科全书& letterV &项= Vodolija(Astrologija)
非英语:阵列([开] =>百科[信] => [长期] =>Škorpija(Astrologija)?)
网址:打开=百科全书&字母=%c5 & term =%c5%a0korpija%20(Astrologija)

<?php print_r($_GET); ?>而不[R]标志:
英文:阵列([开] =>百科全书[信] => V [术语] => Vodolija(Astrologija))
URL:/ Vodolija(Astrologija)
非英语:阵列([开] =>百科全书[信] => S [术语] =>Škorpija(Astrologija))
URL:/Škorpija(Astrologija)

作为索引的网页:
A - 阵列([开放] =>百科全书[letter] => A [term] => A):它不显示页面,它显示空白页面。
O - Array([open] => encyclopedia [letter] => O [term] => O):它不显示页面,它显示空白页面。 S - 数组([open] => encyclopedia [letter] => S [term] => S):它不显示页面,它显示空白页面。
至于所有其他的索引页面,URL是Array([open] => encyclopedia [letter] => AnyLetter [term] => 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页面:至于“双字母”字母,它会正确打开每个字母。至于单个字母,它会加载除AOS以外的所有字母。
•期限页数:考虑它不会打开一个Ø小号,因此它不会打开自己的网页条款。
/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

您使用ASCII范围虽然似乎得到多字节UTF-8,因此在捕获的子掩码中,这些符号可能会被打破。 – Deadooshka

+0

为什么现在你的规则中有'R'国旗?拥有'R'将完成重定向,并将您的内部URL公开给客户端。还澄清[我的这个答案](https://stackoverflow.com/a/44504653/548225)在哪些方面不适合你? – anubhava

+0

@anubhava是的,我希望它与'R'edirect以及快捷方式一起正常工作,这就是我添加它。可悲的是,当我第一次使用你的代码时,我没有完全测试它。它显示错误,正如我在上面详细解释的。我更新了我的问题。 – De1an

回答

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] 
+0

不,不幸的是,它不起作用。当我添加'NE'时,没有任何反应,它不会重定向。 – De1an

+0

更新了答案。 – napuzba

+0

经过大量的调整和测试,我发现你的代码正在工作。因此,除了字母DŽ(它不断打开字母D,而不是DŽ的索引页),一切正常。我更新了我的问题与调整的代码。看看你是否想要。 – De1an

0

在我看来,你应该能够使用:

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

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