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 viidudPage_Title
URL param.) Uurige neid URL-i parameetreidPage.php
saab - kas need on ootuspärased? Kuid ma ei eeldaks, et ka lehe pealkiri kontrollib, milline leht tagastatakse - ma eeldaksinPage_Id
seda kontrollida? -
http://localhost:8080/schoolarshop/Page/13/قوانین-و-مقررات
ülemine URL näitab viga, kuidhttp://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/(.*)/(.*)$
kuniRewriteRule ^Page/([\s\S]*)/([\s\S]*)$
ja see töötas. tänan vastuste eest