Udělejte to pro 1000x rychlejší růst rostlin Vzduchové prořezávání DIY experimentů

Chtěl bych udělat nějaké přepisování URL (Proč? Podívejte se na tuto otázku.), Aby místo toho, aby uživatelé viděli adresy jako

labouseur.com/course-compilers.html 

místo toho mohou jednoduše vidět a používat

labouseur.com/course-compilers 

(Ještě lépe, možná bych to měl restrukturalizovat, aby to byly kurzy / překladače.)

Pro svůj web používám sdílenou hostingovou službu založenou na Linuxu, takže nemám administrativní kontrolu nad serverem, ale mám kontrolu nad .htaccess. Reference, které jsem četl online, mi připadaly méně než jasné, takže zde hledám trochu jasnosti a rady.

  • Všimněte si, že to není něco, co vy pouze proveďte v konfiguraci serveru (.htaccess). Důležitým prvním krokem je skutečně změnit adresy URL ve vaší aplikaci, jinak skončíte se spoustou zbytečných přesměrování (nebo duplicitního obsahu).

Ve skutečnosti můžete odstranit .html ze souborů na vašem serveru a provést nastavení v htaccess tak, aby se zobrazovaly jako soubory html, ale to pravděpodobně není to, co hledáte.

Udělej to :

RewriteEngine on # Check this condition to ensure that it's not a directory. RewriteCond %{REQUEST_FILENAME} !-d # Check this condition to ensure that there's a file there RewriteCond %{REQUEST_FILENAME}\.html -f # Replace html with your file extension, eg: php, htm, asp RewriteRule ^(.*)$ $1.html 
  • Zde je složitější, zvláště pokud se obáváte problémů s duplicitním obsahem. S výše uvedeným pravidlem budou vaše stránky stále přístupné ze starých adres URL.

Nejprve se ujistěte, že apache má modul a že je povolen v souborech .htacces, pak přidejte:

RewriteEngine on # Rewrite rules RewriteRule ^/myoldsubfolder/(.*) /newfolder/$1 

Váš příklad by vyžadoval

RewriteCond %{REQUEST_URI} !-d RewriteCond %{REQUEST_URI}\.html -f RewriteRule ^/(([a-zA-Z0-9_]+)/?)$ /$1.html 

Pro jednoúrovňovou adresářovou strukturu a

RewriteRule ^/(([a-zA-Z0-9_]+)/?)+$ /$1.html 

Pro víceúrovňovou strukturu.

Ale buď opatrný

Pokud máte strukturu

/site/.htaccess /site/subfolder/.htaccess /site/subfolder/cats/.htaccess 

Pravidla přepisování v dítěti .htaccess soubory budou relativní k jejich nadřazené složce a do některých se můžete dostat chaotický přepsat situace smyčky. Ujistěte se, že používáte RewriteCond zastavit je v dělání, pokud můžete!

  • Vadilo by vám jít v tomto posledním bodě podrobněji (k zastavení smyček pomocí RewriteCond)?

Kromě výše uvedených odpovědí lze použít

RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.html -f RewriteRule ^([\w-]+)$ $1.html [L] 

([\w-]+) Umožňuje písmena a číslice se spojovníkem (-).

(.*) přepíše každý požadavek bez ohledu na to, což může impotovat další následující pravidla způsobující interní chybu serveru při přístupu.

  • Vaše RewriteRule vzor je vylepšení oproti přijaté odpovědi pro konkrétní příklad uvedený v otázce, ale selže v porovnání s obecnějším případem, když existuje více než jeden segment cesty, např. /path/to/course-compilers. Zahrnout L příznakem, aby se snížil dopad na následující pravidla. Zatímco (.*) vzor je zbytečně obecný, je nepravděpodobné, že by způsobil vážné problémy, protože stav který kontroluje, zda soubor existuje.

K tomu nemusíte používat soubor .htaccess. Jednoduše strukturujte soubory do adresářů a místo použití „labouseur.com/course-compilers.html“ jednoduše pojmenujte soubor index.html a vložte jej do adresáře s názvem „course-compilers“. Když pak ukážete na tento adresář, index se ve výchozím nastavení zobrazí, ale nebude se zobrazovat v adrese URL. Vaše odkazy tedy můžete napsat jako „labourseur.com/course-compilers“ a vše bude v pořádku.

Není vyžadován .htaccess.

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