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-TitleApache se pokusí najít odpovídající soubor v aktuálním / kořenovém adresáři, který odpovídá názvu basen Pagetí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 do Page_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 bych Page_Id ovládat to?
  • http://localhost:8080/schoolarshop/Page/13/قوانین-و-مقررات horní adresa URL ukazuje chybu, ale http://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/(.*)/(.*)$ na RewriteRule ^Page/([\s\S]*)/([\s\S]*)$ a fungovalo to. děkuji za vaše odpovědi

Pracoval pro vás: Charles Robertson | Chcete nás kontaktovat?