2017-06-16 158 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]