Решение проблемы с кодировкой символов на сайте (UTF-8). Отображает иероглифы или знаки вопроса

Jeg har følgende .htaccess kode:

RewriteRule ^Indian-Patriot-Name/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+).*?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA] 

Hvilket giver mig mulighed for at se resultatet af følgende link:

example.com/Indian-Patriot-Name/104/8/ச்வடன்ற்யவீர்%20சவர்க்கார்%20రాష్ట్రీయ%20சமரக் 

Men når jeg vil se følgende URL (ikke unicode):

example.com/Indian-Patriot-Name/104/8/abcd 

Jeg kan ikke se output, da jeg får fejlen "fil ikke fundet"! Men hvis jeg ændrer direktivet / regex til det følgende, kan jeg læse ovenstående (ikke-unicode) URL korrekt.

RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [L] 

Q. Hvordan kan jeg kombinere ([A-Za-z0-9-]+) og ([^\x00-\x7F]+) i samme omskrivningserklæring?

Jeg forsøgte:

RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+)+([A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA] 

men jeg får en "fil ikke fundet" -fejl igen.


OPDATERING: Jeg prøvede følgende:

RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+ [A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA] 

Men jeg får en intern serverfejl:

Intern serverfejl Serveren stødte på en intern fejl eller fejlkonfiguration og kunne ikke fuldføre din anmodning.

Kontakt serveradministratoren på [email protected] for at informere dem om tidspunktet for denne fejl og de handlinger, du udførte lige før denne fejl.

Flere oplysninger om denne fejl kan være tilgængelige i serverfejlloggen.

Derudover opstod der en 500 intern serverfejlfejl under forsøg på at bruge et ErrorDocument til at håndtere anmodningen.

  • Som med alle interne fejl, skal du kontrollere dine logfiler, Apache vil have fortalt dig der, hvad der er galt (udover det faktum, at det havde søgt efter noget, der skulle vises som et 500 ErrorDocument, og det blev ikke fundet på grund af ugyldig konfiguration)
  • Jeg forstår heller ikke dit problem. Du kan ikke "kombinere" ([A-Za-z0-9-]+) og ([^\x00-\x7F]+) som noget der matcher den første specifikation ikke kan matche den anden (tegnene i den første er faktisk i \ x00- \ x7F-området, som den anden vil ekskludere)
  • lad mig omdefinere denne omskrivning ([^ \ x00- \ x7F] +) fungerer fint. Hvordan kan jeg tillade A-Za-z0-9- også i ([^ \ x00- \ x7F] +)
  • 1 Stadig ikke klart for mig, men prøv ([^\x00-\x7F]+|[A-Za-z0-9-]+)
  • lad mig omdefinere dette. "rewrite ([^ \ x00- \ x7F] +)" fungerer kun fint til unicode. Jeg ønsker at tillade A-Za-z0-9- tegnsæt i denne omskrivningserklæring, dvs. Unicode og A-Za-z0-9 sammen i samme omskrivningserklæring
RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+ [A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA] 

Jeg får intern serverfejl ...

Du har en fejlagtig plads i RewriteRule mønster. Dette vil resultere i din "Intern serverfejl" siden mellemrum er afgrænsere i Apache-direktiver. Hvis du tjekker din fejllog, vil du sandsynligvis se en fejl om "Ugyldige flag" siden indianpatriot.php?id... vil nu blive set som flag argument til RewriteRule direktiv.

Imidlertid forslaget fra @PatrickMevzek i kommentarer, at bruge skiftevis ser ud som om det skulle have fungeret. For eksempel:

RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+|[A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA] 

Bemærk, at din oprindelige regex, der matcher unicode-URL'en, havde et ekstra "fang alt andet" mønster i slutningen: .*?. (Din regex, der matcher den ikke-unicode URL, har ikke dette.) Dette virker usædvanligt. Hvis dette er påkrævet, kan du blot udelade $ (slutningen af ​​strenganker) fra slutningen af ​​mønsteret for at gøre det samme.

Bemærk også, at [^\x00-\x7F] er en negeret karakterklasse, der matcher ethvert tegn ikke i byteområdet 00..7F (hex). For at indarbejde det latinske alfabet, der falder inden for dette interval, kan du blot udvide dette interval: [\x00-\xFF] - dette er nu et positivt interval, der matcher alt (hvilket uden tvivl er mere end du har brug for, men du matchede sandsynligvis mere, end du havde brug for, med den originale regex).

Dette kunne dog måske forenkles. Hvis du bare vil matche hvad som helst (unicode eller latinske tegn) i slutningen af ​​URL'en derefter ([^\x00-\x7F]+|[A-Za-z0-9-]+) (eller endda ([\x00-\xFF]+)) kunne forenkles til ([^/]+) (dvs. alt undtagen en skråstreg). Og forudsat at du ikke også har noget imod at matche understregningskarakteren, så [A-Za-z0-9-] kunne reduceres til [\w-]. Så dette bliver:

RewriteRule ^Indian-Patriot-Name-English/(\w-]+)/([\w-]+)/([^/]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA] 

arbejdet for dig: Charles Robertson | Ønsker du at kontakte os?