Slik fjerner du uskarphet for tekst på ethvert nettsted! Dette fungerer faktisk!

Jeg utvikler en PHP-webapplikasjon. Jeg har sider, innlegg, kategorier, produkt og så videre.

Her er min .htaccess fil for å lage SEO-vennlig URL:

Options -Indexes RewriteEngine on RewriteRule ^Page/(.*)/(.*)$ Page.php?Page_Id=$1&Page_Title=$2 [NC,L] RewriteRule ^Product/(.*)/(.*)$ Product.php?Product_Id=$1&Product_Title=$2 [NC,L] RewriteRule ^Category/(.*)/(.*)$ Category.php?Category_Id=$1&Category_Title=$2 [NC,L] RewriteRule ^Single/(.*)/(.*)$ Single.php?Post_Id=$1&Post_Title=$2 [NC,L] RewriteRule ^Blog/(.*)/(.*)$ Blog.php?Category_Id=$1&Category_Title=$2 [NC,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.+)$ $1.php [L,QSA]  Order Allow,Deny Deny from all   ExpiresActive On ExpiresDefault 'access plus 1 month' ExpiresByType image/x-icon 'access plus 1 year' ExpiresByType image/gif 'access plus 1 month' ExpiresByType image/png 'access plus 1 month' ExpiresByType image/jpg 'access plus 1 month' ExpiresByType image/jpeg 'access plus 1 month' ExpiresByType text/css 'access plus 1 month' ExpiresByType application/javascript 'access plus 1 year'  

Når jeg besøker Page.php?Page_Id=13 det fungerer. Og også når jeg besøker Page/13/Page-Title det fungerer. Alt er bra når jeg tester applikasjonen min på serveren, men det fungerer ikke i wamp localhost.

Jeg er aktiv

LoadModule rewrite_module modules/mod_rewrite.so 

i Apache http.conf og her er min gjest:

  ServerName localhost DocumentRoot c:/wamp64/www  Options +Indexes +Includes +FollowSymLinks +MultiViews AllowOverride All Require local    ServerName schoolarshop DocumentRoot 'c:/wamp64/www/schoolarshop'  Options +Indexes +Includes +FollowSymLinks +MultiViews AllowOverride none Require local   

Eksempel på feil i localhost er:

Notice: Undefined index: Page_Id in Page.php on line 8 

Hvorfor fungerer det på serveren og ikke i localhost?

Jeg googlet mye, men den finner ikke noe.

  • Bruker du WordPress? du må oppdatere nettadressen til nettstedet og permalinks.
  • nei jeg bruker ren php
Options +Indexes +Includes +FollowSymLinks +MultiViews 

Hvorfor aktiverer du eksplisitt MultiViews i serverkonfigurasjonen din? Dette er sannsynligvis årsaken til problemet ditt. Prøv å fjerne +MultiViews fra serverkonfigurasjonen (over), og / eller deaktiver MultiViews øverst på .htaccess:

 Options -Indexes -MultiViews 

MutliViews er deaktivert ved en standard Apache-installasjon, men noen (delte) verter ser ut til å aktivere det. Så, deaktivere det i .htaccess som en selvfølge anbefales sannsynligvis.

(Men også hvorfor aktiverer du det Includes - er dette virkelig nødvendig? Siden du bruker PHP, er dette lite sannsynlig.)

Effekten av MultiViews er merkbar fordi du effektivt har fjernet filtypen for å lage dine brukervennlige nettadresser.

Med MultiViews aktivert (del av mod_negotiation) ... når du ber om det Page/13/Page-Title, Apache prøver å finne en samsvarende fil i gjeldende / rotkatalog som samsvarer med basenavnet Page, ved å prøve forskjellige utvidelser som vil returnere riktig mime-type. Dette skjer før mod_rewrite er i stand til å skrive om din vennlige nettadresse. Så ender MultiViews med å skrive om forespørselen din til Page.php uten å passere noen av URL-paramene (resten av URL-en vil sannsynligvis bli sett på som PATH_INFO), derav "Undefined index" PHP-varsel.

(Selv om du også burde sjekke om dette eksisterer $_GET variabel i PHP-skriptet, som du ikke ser ut til å gjøre.)

  • takk. det fungerer, men nå har jeg noe problem. når jeg besøker side / 13 / sidetittel hvis lengden på sidetittelen er mindre enn 5, fungerer den, men for mer enn 5 tegn viser den ønsket URL-side / 13 / blah- blah-blah-blah ble ikke funnet på denne serveren.
  • Det ser ikke ut til å være noe i din .htaccess fil som vil være avhengig av sidetittelengden. (Alt etter at den andre skråstreken rett og slett blir sendt videre til Page_Title URL-parameter.) Undersøk URL-parameterne som Page.php mottar - er disse som forventet? Jeg forventer imidlertid ikke at sidetittelen skal kontrollere hvilken side som returneres heller - jeg forventer at Page_Id for å kontrollere dette?
  • http://localhost:8080/schoolarshop/Page/13/قوانین-و-مقررات den øverste nettadressen viser feil, men http://localhost:8080/schoolarshop/Page/13/قوانینvirker
  • Kanskje et tegnkodning eller applikasjonslogikkproblem i serveren din PHP / DB-kode? Som nevnt er det ingenting i koden du har lagt ut (Apache-direktiver) som kan forklare dette. Hvilken versjon av Apache bruker du?
  • Beklager at jeg gjør det på en feil måte. Jeg endrer meg RewriteRule ^Page/(.*)/(.*)$ til RewriteRule ^Page/([\s\S]*)/([\s\S]*)$ og det fungerte. takk for svarene dine

fungert for deg: Charles Robertson | Ønsker du å kontakte oss?