Arendan PHP veebirakendust. Mul on lehti, postitusi, kategooriaid, tooteid jne.

Siin on minu .htaccess fail SEO-sõbraliku URL-i loomiseks:

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'  

Kui külastan Page.php?Page_Id=13 see töötab. Ja ka siis, kui külastan Page/13/Page-Title see töötab. Kõik on hea, kui testin oma rakendust serveris, kuid see ei tööta wamp localhostis.

Olen aktiivne

LoadModule rewrite_module modules/mod_rewrite.so 

Apache'is http.conf ja siin on minu vhost:

  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   

Localhosti vea näide on:

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

Miks see töötab serveris ja mitte kohalikus hostis?

Googeldasin palju, kuid see ei leia midagi.

  • Kas kasutate WordPressi? peate värskendama saidi URL-i ja püsilinke.
  • ei, ma kasutan puhast php-d
Options +Indexes +Includes +FollowSymLinks +MultiViews 

Miks lubate selgesõnaliselt MultiViews serveri konfiguratsioonis? Tõenäoliselt on see teie probleemi põhjus. Proovige eemaldada +MultiViews serveri seadistustest (ülalt) ja / või keelake MultiViews oma ülaosas .htaccess:

 Options -Indexes -MultiViews 

MutliViews on Apache vaikimisi installimisel keelatud, kuid mõned (jagatud) hostid näivad seda lubavat. Niisiis, keelates selle sisse .htaccess muidugi on ilmselt soovitatav.

(Aga ka, miks te lubate Includes - kas see on tõesti vajalik? Kuna kasutate PHP-d, pole see tõenäoline.)

MultiViewsi mõju on märgatav, kuna olete kasutajasõbralike URL-ide loomiseks faililaiendi tõhusalt eemaldanud.

Kui MultiViews on lubatud (osa mod_notlusest) ... kui soovite Page/13/Page-Title, Proovib Apache praegusest / juurkataloogist leida sobiva faili, mis vastab basenimele Page, proovides erinevaid laiendusi, mis tagastaksid sobiva miimitüübi. See juhtub enne mod_rewrite suudab teie sõbraliku URL-i ümber kirjutada. Nii kirjutab MultiViews teie päringu lõpuks uuesti Page.php ühtegi URL-i parameetrit edastamata (ülejäänud URL-i peetakse tõenäoliselt PATH_INFO-ks), seega teie PHP märkus "Määratlemata register".

(Kuigi peaksite kontrollima ka selle olemasolu $_GET muutuja teie PHP-skriptis, mida te ilmselt ei tee.)

  • aitäh. see töötab, kuid nüüd on mul kumbagi probleemi. kui külastan lehte / 13 / page-title, kui lehe pealkirja pikkus on väiksem kui 5, siis see töötab, kuid rohkem kui 5 tähemärgi korral näitab see soovitud URL-i leht / 13 / blah- blaa-blaa-blaa ei leitud sellest serverist.
  • Tundub, et teie omas pole midagi .htaccess fail, mis sõltuks lehe pealkirja pikkusest. (Kõik pärast seda, kui teine ​​kaldkriips on lihtsalt läbi viidud Page_Title URL param.) Uurige neid URL-i parameetreid Page.php saab - kas need on ootuspärased? Kuid ma ei eeldaks, et ka lehe pealkiri kontrollib, milline leht tagastatakse - ma eeldaksin Page_Id seda kontrollida?
  • http://localhost:8080/schoolarshop/Page/13/قوانین-و-مقررات ülemine URL näitab viga, kuid http://localhost:8080/schoolarshop/Page/13/قوانینtöötab
  • Võib-olla on teie serveripoolses PHP / DB-koodis märkide kodeerimise või rakenduse loogika probleem? Nagu mainitud, pole teie postitatud koodis (Apache direktiivid) midagi sellist selgitavat. Mis Apache versiooni te kasutate?
  • 1 vabandust, et teen seda valesti. Muutun RewriteRule ^Page/(.*)/(.*)$ kuni RewriteRule ^Page/([\s\S]*)/([\s\S]*)$ ja see töötas. tänan vastuste eest

none: Charles Robertson | none