Snažím se z toho vytvořit svou adresu URL:

example.com/view.php?id=15 

K tomuto:

example.com/watch/15 

Můj kód je v .htaccess je následující:

Options -Indexes Options +FollowSymlinks RewriteEngine On RewriteRule ^watch/([^/]+) view.php?id=$1 [NC] 

Teď, když půjdu na example.com/watch/15 načte obsah, ale bez JS, CSS, protože v tomto případě hledá CSS a JS pod /watch složka, která neexistuje.

Jak zajistím, aby tato možnost fungovala správně? Nechci vytvářet sledovanou složku a kopírovat a vložit CSS a JS, aby se správně vložily.

  • 1 Vytvořte ve svých referencích JS a CSS úplné adresy URL místo relativních.
  • ... nebo zahrnout base prvek, který odkazuje na základní adresu URL, ke které jsou relativní všechny relativní adresy URL. @closetnoc, měli byste to přidat jako odpověď.
  • @ w3d Nebo možná proto, že si nejsem jistý, co jsi právě řekl, možná to můžeš dát do odpovědi. ;-) Slibuji, že to hlasuji! Mohl bych to lépe pochopit, když se zvedne mlha - právě vstal z dlouhého spánku po 2 nocích, každý jen asi za 5 hodin spánku.

Nelze najít soubory JavaScript a CSS je problém na straně klienta / prohlížeče související s vaší cestou URL, není to něco, co by mělo být opraveno .htaccess (alespoň v tomto případě ne) - i když je to proto, že měníte tuto cestu URL (v .htaccess), že máte tento problém.

Jak @closetnoc navrhuje v komentářích, tento problém je způsoben používáním relativních adres URL ve vašem HTML. Ve vztahu k čemu? Pamatujte, že relativní adresy URL ve vašem kódu HTML řeší uživatelský agent / prohlížeč, nikoli server. Musíte tedy opravit své adresy URL; ne .htaccess.

Například pokud odkazujete na svůj soubor CSS pomocí a relativní URL formuláře href='styles.css' (poznámka, bez předpony lomítka) a právě jste na adrese URL example.com/view.php?id=15 pak prohlížeč přirozeně vyřeší vaši adresu URL CSS a požadavek example.com/styles.css (v kořenovém adresáři dokumentu). Pokud se však právě nacházíte na adrese URL example.com/watch/15 (účinně v /watch „podadresář“ [*1]) pak prohlížeč vyřeší vaše relativní URL CSS relativní do a /watch podadresář, nikoli kořen dokumentu, takže skončíte s absolutní / vyřešenou adresou URL formuláře example.com/watch/styles.css.

([*1] „Podadresář“ v tomto kontextu nemusí být nutně fyzickým podadresářem na vašem serveru - jedná se o „podadresář“ v cestě URL; další segment cesty. Ale prohlížeč nezná rozdíl.)

Totéž platí, pokud používáte relativní adresy URL ve svých vlastních chybových dokumentech (definovaných pomocí ErrorDocument směrnice o Apache). Vlastní chybový dokument lze potenciálně volat na libovolné adrese URL, takže jakákoli relativní adresa URL ke statickému prostředku (CSS, obrázek, JS atd.) Bude relativní k adrese URL, která chybu způsobila, nikoli relativní k samotnému chybovému dokumentu (jehož umístění je účinně skryto před agentem uživatele).

Pokud jste změnili své adresy URL JavaScriptu a CSS tak, aby byly relativní ke kořenům (začínající lomítkem) nebo dokonce absolutní, pak byste tento problém nezískali. To by byla upřednostňovaná metoda. Případně můžete použít base živel...

base tag / prvek

Alternativně můžete zahrnout a base prvek v head část vašeho dokumentu HTML (i když to není bez námitek [*2]). Toto odkazuje na absolutní adresu URL, kterou jsou všechny relativní adresy URL relativní na. Jinými slovy, protože očekáváte, že tyto relativní adresy URL budou relativní ke kořenu dokumentu, přidejte do head sekce:

 

Nyní relativní URL, jako je styles.css odkazováno v dokumentu na URL /watch/15 bude požadovat http://example.com/styles.css, ne http://example.com/watch/styles.css.

[*2] Existují však určité výhrady k používání base živel. Primárním problémem je, že jakýkoli relativní URL, která je určena k cílení na aktuální dokument nyní namísto toho zacílí na základní adresu URL. To může ovlivnit kotvy na stránce jako href='#top' a adresy URL formuláře href='?sortby=date' atd. A také form prvky, které se podrobí prázdnému action atribut (např. <form action='' ...base označit jako řešení začít s).

Odkaz:

  • https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
  • https://stackoverflow.com/questions/1889076/ what-are-the-recommendations-for-html-base-tag
  • 1 Ano, funguje to, jakmile přidám základnu v sekci hlavy. Ztrácel jsem 2 hodiny pokusem o to, a přesto je to jednoduché jako přidání 1 řádku kódu ...Děkuji za informativní odpověď!

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