Ben mesajı http://stackoverflow.com/questions/2565864/validating-utf-8-in-htaccess-rewrite-rule görmek ve ben harika olduğunu düşünüyorum, ama daha temel bir sorun ben ilk yaşıyorum:
Ben sorgu dizesi parametreleri, dizin, dosya adları ve kullanıcılara vb ekranlarda kullanılan utf-8 karakter işlemek için genişletmek için gerekli
Ben DefaultCharset utf-8 ve aynı zamanda benim php bu konularda benim Apache yapılandırılmış. Benim orijinal yazma kuralı normal A-Za-z hariç her şeyi süzülür ve çizgi ve tire. ve işe yaradı. Başka bir şey (ne istiyorum ki!) Size 404 verecek Şimdi, ancak o sorgu dizesinde gitmez maç gibi görünüyor, ancak her şeyi, ben ancak, istemiyorum şeyler de dahil olmak üzere, maçlar görünüyor sürece düzenli bir A-Za-z_-karakter dizesidir.
Kural sorgu dizeye eşleşti ne yakarım diyor çünkü ben, bu kafa karıştırıcı bulabilirsiniz:
Burada orijinal kural şudur:
RewriteRule ^/puzzle/([A-Za-z_-]+)$ /puzzle.php?g=$1 [NC]
ve burada revize kural şudur:
RewriteRule ^/puzzle/(\w+)$ /puzzle.php?g=$1 [NC]
Yerde ben \ w-Zetc olarak TÜM alfa karakter eşleşen okudum çünkü ben bir değişiklik yaptı. sadece aksan ve malzeme olmadan olanları eşleşir.
İşte olur: Ben kullanmak bu kuralların hangi önemli görünmüyor:
Uygulamada bu var:
echo $_GET['g'];
If I feed it a url like http://mydomain.com/puzzle/USA it echoes out "USA" and works fine.
If I feed it a url like http://mydomain.com/puzzle/México it echoes nothing for that and warns me that index g is not defined and of course doesn't get resources for Mexico.
if I feed it a url like http://mydomain.com/puzzle/fuzzle/buzzle/j.qle it does the same thing.
This last case should be a 404!
Ve ne olursa olsun ben kullanmak yukarıdaki kuralların hangi yapar. Ben bir yeniden yazma günlüğünü yapılandırılmış
RewriteLogLevel 5
RewriteLog /opt/local/apache2/logs/puzzles.httpd.rewrite
ama boş.
İşte (o 200 bir statü verir) düzenli erişim günlüğüne değil
[26/May/2010:11:21:42 -0700] "GET /puzzle/M%C3%A9xico HTTP/1.1" 200 342
[26/May/2010:11:21:54 -0700] "GET /puzzle/M/l.foo HTTP/1.1" 200 342
Ne (* # @! Karakter ama, benim programa nokta veya diğer non-alfa çizgi, ve bir kez orada, doğru onları deşifre edecek değil bu $% # $ @ almak için ne yapabilirim?? Karakter sınıfları POSIX misiniz daha iyi çalışır? Yapılandırmak için gereken başka bir şey var mı?