Jak zrušit rozmazání textu na libovolném webu! To ve skutečnosti funguje!
Vyvíjím webovou aplikaci PHP. Mám stránky, příspěvky, kategorie, produkt atd.
Tady je moje .htaccess
soubor pro vytvoření SEO friendly 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'
Když jsem na návštěvě Page.php?Page_Id=13
funguje to. A také při návštěvě Page/13/Page-Title
funguje to. Všechno je dobré, když testuji svoji aplikaci na serveru, ale nefunguje to v wamp localhost.
Jsem aktivní
LoadModule rewrite_module modules/mod_rewrite.so
v Apache http.conf
a tady je můj 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
Příklad chyby v localhost je:
Notice: Undefined index: Page_Id in Page.php on line 8
Proč to funguje na serveru a ne v localhost?
Hodně jsem Googloval, ale nic nenašel.
- Používáte WordPress? musíte aktualizovat adresu URL a trvalé odkazy.
- ne, používám čistý php
Options +Indexes +Includes +FollowSymLinks +MultiViews
Proč to výslovně povolujete MultiViews
v konfiguraci serveru? To je pravděpodobně příčina vašeho problému. Zkuste odstranit +MultiViews
z konfigurace serveru (výše) nebo deaktivujte MultiViews v horní části vašeho .htaccess
:
Options -Indexes -MultiViews
MutliViews je ve výchozí instalaci Apache zakázán, zdá se však, že to někteří (sdílení) hostitelé povolují. Takže jeho deaktivace .htaccess
jako samozřejmost se pravděpodobně doporučuje.
(Ale také, proč to povolujete Includes
- je to opravdu nutné? Jelikož používáte PHP, je to nepravděpodobné.)
Účinek MultiViews je patrný, protože jste účinně odstranili příponu souboru a vytvořili uživatelsky přívětivé adresy URL.
Se zapnutou funkcí MultiViews (součást mod_negotiation) ... na požádání Page/13/Page-Title
Apache se pokusí najít odpovídající soubor v aktuálním / kořenovém adresáři, který odpovídá názvu basen Page
tím, že vyzkoušíte různá rozšíření, která by vrátila příslušný typ mime. K tomu dochází před mod_rewrite dokáže přepsat vaši přátelskou adresu URL. MultiViews tedy nakonec přepíše váš požadavek na Page.php
aniž byste předali některý z parametrů adresy URL (zbytek adresy URL bude pravděpodobně považován za PATH_INFO), proto vaše upozornění PHP „Nedefinovaný index“.
(Ačkoli byste měli také zkontrolovat existenci tohoto $_GET
proměnnou ve vašem skriptu PHP, což, jak se zdá, neděláte.)
- děkuji. funguje to, ale teď mám buď problém. když navštívím stránku / 13 / název stránky, pokud je délka názvu stránky menší než 5, funguje to, ale pro více než 5 znaků se zobrazuje požadovaná adresa URL stránka / 13 / blah- bla-bla-bla nebyl na tomto serveru nalezen.
- Zdá se, že ve vašem není nic
.htaccess
soubor, který by závisel na délce názvu stránky. (Všechno poté, co je druhé lomítko jednoduše předáno doPage_Title
Parametr URL.) Zkontrolujte parametry URL, kteréPage.php
přijímá - je to podle očekávání? Nečekal bych však, že nadpis stránky bude řídit, která stránka se vrátí - očekával bychPage_Id
ovládat to? -
http://localhost:8080/schoolarshop/Page/13/قوانین-و-مقررات
horní adresa URL ukazuje chybu, alehttp://localhost:8080/schoolarshop/Page/13/قوانین
funguje - Možná problém s kódováním znaků nebo logikou aplikace ve vašem kódu PHP / DB na straně serveru? Jak již bylo zmíněno, v kódu, který jste zveřejnili (směrnice Apache), není nic, co by to vysvětlovalo. Jakou verzi Apache používáte?
- 1 omlouvám se, že to dělám špatně. Změním se
RewriteRule ^Page/(.*)/(.*)$
naRewriteRule ^Page/([\s\S]*)/([\s\S]*)$
a fungovalo to. děkuji za vaše odpovědi