Hemsidan som inte slutar på .php

Permalänk

Hemsidan som inte slutar på .php

Hur gör man för att en hemsida inte ska sluta med .php?
Om jag t.ex har minhemsida.se/kontakt.php hur gör jag då för att få minhemsida.se/kontakt istället?
Hur gör man för att dölja filändelsen?

Eller kanske ändra från domän.se/?page=contact till domän.se/contact

Förklara gärna

Permalänk
Medlem

Tror du är ute efter det som kallas "URL rewrite".
Jag är ingen mästare på det men har lyckats med det jag ville.

Mitt tips är att googla runt lite på "Url rewrite php" om det nu är PHP du jobbar med.

Visa signatur

Tänk på att citera så kanske jag hittar tillbaka

Permalänk
Medlem

på webbservern ställer man in default page. Om du då inte skriver in något filnamn alls så öppnas default utan att visa filnamnnet.

Visa signatur

5700x3D | RTX 2060 Super | 2 TB M.2 | 32 GB RAM | Gigabyte DS3H| 750 WATT

Permalänk
Inaktiv

Om du kör Apache som webbserver kan du göra detta via mod_rewrite:

.htaccess # ---------------------------------------------------------------------- # Rewrite all non-directory and -file requests to index.php # ---------------------------------------------------------------------- RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?p=$1 [L]

Den förfrågade sidan sparas då i GET-variablen p, kolla hur den ser ut och testa med lite olika adresser för att få en känsla för hur det fungerar:

index.php <?php var_dump($_GET['p']);

Permalänk
Hedersmedlem

*Inlägg raderat*

Har man inget mer konstruktivt att skriva än en länk till LMGTFY så kan man hellre undvika att svara. Detta inte minst då det lätt uppfattas provokativt (vilket ofta till och med är intentionen, varpå man kan läsa min första mening igen ).

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Skrivet av anon150287:

Om du kör Apache som webbserver kan du göra detta via mod_rewrite:

.htaccess # ---------------------------------------------------------------------- # Rewrite all non-directory and -file requests to index.php # ---------------------------------------------------------------------- RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?p=$1 [l]

Den förfrågade sidan sparas då i GET-variablen p, kolla hur den ser ut och testa med lite olika adresser för att få en känsla för hur det fungerar:

index.php <?php var_dump($_GET['p']);

Man får tacka för svaret. Jag har googlat mycket om det här under en längre tid nu utan att riktigt förstå hur jag ska göra. Ska kika mer på detta imorgon.

Men vad är det din kod egentligen gör? Döper den om /?p=kontakt till /kontakt ? För det är det jag vill få fram

Jag får återkomma med svar hur det gick

Permalänk
Inaktiv
Skrivet av pineapple:

Man får tacka för svaret. Jag har googlat mycket om det här under en längre tid nu utan att riktigt förstå hur jag ska göra. Ska kika mer på detta imorgon.

Men vad är det din kod egentligen gör? Döper den om /?p=kontakt till /kontakt ? För det är det jag vill få fram

Jag får återkomma med svar hur det gick

Det du gör är att om du har en fil som heter index.php i mappen /kontakt så kommer den att öppnas automatiskt. På samma vis som att jag inte behöver skriva:
http://www.minhemsida.se/index.php eller www.enannnansida.se/test/index.html så fungerar minhemsida.se eller enannansida.se/test lika bra om apache automagiskt laddar filer som heter index.php i exemplet.

Det borde vara standard annars få du bara lägga till det

Permalänk
Skrivet av anon81912:

Det du gör är att om du har en fil som heter index.php i mappen /kontakt så kommer den att öppnas automatiskt. På samma vis som att jag inte behöver skriva:
http://www.minhemsida.se/index.php eller www.enannnansida.se/test/index.html så fungerar minhemsida.se eller enannansida.se/test lika bra om apache automagiskt laddar filer som heter index.php i exemplet.

Det borde vara standard annars få du bara lägga till det

Nja, det är väl inte den vackraste lösningen precis. Man brukar föredra att ha en index-fil som i sin tur inkluderar andra filer beroende på url:en - på det viset kan man samla det som är gemensamt för alla sidor i samma fil.

Det rätta sättet är som redan nämnts mod_rewrite om man kör Apache och URL Rewrite om man kör Windows/IIS. Man skapar en regel som bearbetar URL:en på önskat sätt och pekar den till resp. intern länk.

Permalänk
Skrivet av anon81912:

Det du gör är att om du har en fil som heter index.php i mappen /kontakt så kommer den att öppnas automatiskt. På samma vis som att jag inte behöver skriva:
http://www.minhemsida.se/index.php eller www.enannnansida.se/test/index.html så fungerar minhemsida.se eller enannansida.se/test lika bra om apache automagiskt laddar filer som heter index.php i exemplet.

Det borde vara standard annars få du bara lägga till det

Ja det vet jag, känns lite jobbigt att ha en mapp för varje sida. Kanske går att lösa det med mod_rewrite? Hade ju varit underbart med en lättare lösning än att göra mapp. Men får som sagt kika på det som skrevs tidigare

Skickades från m.sweclockers.com

Permalänk
Inaktiv
Skrivet av pineapple:

Ja det vet jag, känns lite jobbigt att ha en mapp för varje sida. Kanske går att lösa det med mod_rewrite? Hade ju varit underbart med en lättare lösning än att göra mapp. Men får som sagt kika på det som skrevs tidigare

Skickades från m.sweclockers.com

Jag tycker personligen att man ska ha en mapp för varje sida. Blir bra koll på resurser och libfiler då. Du kan ju alltid döpa bibliotek och sådant till samma sak om varje undersida ligger i en mapp. Men vad vet jag, du kanske lagrar alla dina filer under C:/ också?

Permalänk
Inaktiv
Skrivet av pineapple:

Man får tacka för svaret. Jag har googlat mycket om det här under en längre tid nu utan att riktigt förstå hur jag ska göra. Ska kika mer på detta imorgon.

Men vad är det din kod egentligen gör? Döper den om /?p=kontakt till /kontakt ? För det är det jag vill få fram

Jag får återkomma med svar hur det gick

Vad den gör är att om webbservern får en förfrågan tex. /kontakt kollar den först om filen "kontakt" finns, sedan om mappen "kontakt" finns. Detta görs av

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d

Om inget av detta gäller, så skickar den index.php till användaren istället. Detta blir ekvivalent med att gå till index.php?p=kontakt. Så i index.php får du sedan switcha eller liknande på $_GET['p']. Om du går till /sida/undersida/underundersida så kommer det vara ekvivalent (förutsatt att "/sida/undersida/underundersida" inte finns på din server) med index.php?p=sida/undersida/underundersida. Detta görs av

RewriteRule ^(.*)$ /index.php?p=$1 [l]

Permalänk
Medlem
Skrivet av pineapple:

Ja det vet jag, känns lite jobbigt att ha en mapp för varje sida. Kanske går att lösa det med mod_rewrite? Hade ju varit underbart med en lättare lösning än att göra mapp. Men får som sagt kika på det som skrevs tidigare

Skickades från m.sweclockers.com

Jag tror att du är ute efter mod_rewrite.
Här är ett exempel på om du bara vill ta bort .php från adressen.
Det kräver att mod_rewrite är aktivt på servern.

I mappen för hemsidan lägger du en fil (om du inte redan har en) som heter .htaccess med följande kod i

Options +FollowSymlinks RewriteEngine On RewriteRule ^/?([a-z]+)$ $1.php [NC,L]

Det gör att när du skriver adressen http://minsida.se/kontakt kommer servern leta efter och visa sidan http://minsida.se/kontakt.php

Väldigt enkelt exempel för att bara få bort .php på slutet.

Visa signatur

Tänk på att citera så kanske jag hittar tillbaka

Permalänk
Skrivet av anon150287:

Vad den gör är att om webbservern får en förfrågan tex. /kontakt kollar den först om filen "kontakt" finns, sedan om mappen "kontakt" finns. Detta görs av

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d

Om inget av detta gäller, så skickar den index.php till användaren istället. Detta blir ekvivalent med att gå till index.php?p=kontakt. Så i index.php får du sedan switcha eller liknande på $_GET['p']. Om du går till /sida/undersida/underundersida så kommer det vara ekvivalent (förutsatt att "/sida/undersida/underundersida" inte finns på din server) med index.php?p=sida/undersida/underundersida. Detta görs av

RewriteRule ^(.*)$ /index.php?p=$1 [l]

Skrivet av Zcalman:

Jag tror att du är ute efter mod_rewrite.
Här är ett exempel på om du bara vill ta bort .php från adressen.
Det kräver att mod_rewrite är aktivt på servern.

I mappen för hemsidan lägger du en fil (om du inte redan har en) som heter .htaccess med följande kod i

Options +FollowSymlinks RewriteEngine On RewriteRule ^/?([a-z]+)$ $1.php [NC,L]

Det gör att när du skriver adressen http://minsida.se/kontakt kommer servern leta efter och visa sidan http://minsida.se/kontakt.php

Väldigt enkelt exempel för att bara få bort .php på slutet.

Ja nu vet jag inte ens var jag ska aktivera AllowOverride All? Ska tydligen aktiveras i 000-default men den ser helt annorlunda ut än vad som står när jag googlar. Jag får bara ett stort error när jag skriver in RewriteEngine och resten av koden. "Internal Server Error"

Hur gjorde jag nu om jag inte hade mappar för varje sida utan hade /?p=kontakt och ville döpa den till /kontakt ?
Nu är jag inte så haj på .htaccess och mod_rewrite och jag är helt lost :S
Jag får tacka för ovanstående för svaret

Permalänk
Inaktiv
Skrivet av pineapple:

Ja nu vet jag inte ens var jag ska aktivera AllowOverride All? Ska tydligen aktiveras i 000-default men den ser helt annorlunda ut än vad som står när jag googlar. Jag får bara ett stort error när jag skriver in RewriteEngine och resten av koden. "Internal Server Error"

Hur gjorde jag nu om jag inte hade mappar för varje sida utan hade /?p=kontakt och ville döpa den till /kontakt ?
Nu är jag inte så haj på .htaccess och mod_rewrite och jag är helt lost :S
Jag får tacka för ovanstående för svaret

Vad har du för operativsystem? Hur ser din 000-default.conf ut? Ditt "Internal Server Error" beror antagligen på att du inte har mod_rewrite aktiverat.

Permalänk
Skrivet av anon150287:

Vad har du för operativsystem? Hur ser din 000-default.conf ut? Ditt "Internal Server Error" beror antagligen på att du inte har mod_rewrite aktiverat.

Har debian server, har massor med Virtualhost, vet inte riktigt vad som fanns där innan jag ändrade. Var ska jag aktivera mod_rewrite? Är det in apache2.conf eller i 000-default

Permalänk
Hedersmedlem
Skrivet av pineapple:

Har debian server, har massor med Virtualhost, vet inte riktigt vad som fanns där innan jag ändrade. Var ska jag aktivera mod_rewrite? Är det in apache2.conf eller i 000-default

I Debian sköter man moduler i Apache genom hjälpskripten `a2enmod` som aktivererar och `a2dismod` som deaktiverar. De moduler man har att välja på ligger i `/etc/apache2/mods-available`, och länkas in i `/etc/apache2/mods-enabled` när man kör `a2enmod`.

För att se om `mod_rewrite` är aktiverat så kör t ex `ls /etc/apache2/mods-enabled/`. Om symlänken `rewrite.load` finns i den katalogen (och inte är bruten) så är modulen aktiverad. Om du ändrar något så får du ladda om Apaches konfiguration genom förslagsvis `sudo service apache2 reload`.

Det som gäller för hantering av moduler gäller även på motsvarande sätt för hantering av siter och konfigurationsfiler. Läs `/usr/share/doc/apache2/README.Debian.gz` för mer information om hur det är organiserat i Debian.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Skrivet av phz:

I Debian sköter man moduler i Apache genom hjälpskripten `a2enmod` som aktivererar och `a2dismod` som deaktiverar. De moduler man har att välja på ligger i `/etc/apache2/mods-available`, och länkas in i `/etc/apache2/mods-enabled` när man kör `a2enmod`.

För att se om `mod_rewrite` är aktiverat så kör t ex `ls /etc/apache2/mods-enabled/`. Om symlänken `rewrite.load` finns i den katalogen (och inte är bruten) så är modulen aktiverad. Om du ändrar något så får du ladda om Apaches konfiguration genom förslagsvis `sudo service apache2 reload`.

Det som gäller för hantering av moduler gäller även på motsvarande sätt för hantering av siter och konfigurationsfiler. Läs `/usr/share/doc/apache2/README.Debian.gz` för mer information om hur det är organiserat i Debian.

Suveränt, förhoppningvis så löser det sig

Skickades från m.sweclockers.com

Permalänk

Ja mod_rewrite verkar fungera som det ska men jag gör nog inte rätt.
Om jag skriver in hemsida.se/kontakt då ska det fungera och skriver jag in hemsida.se/?p=kontakt då ska det stå hemsida.se/kontakt

Jag vill alltså att den ska döpa om hemsida.se/?p=kontakt till hemsida.se/kontakt och det här ska alltså fungera oavsett vad den slutar på.

EDIT: Nu fick jag igång det och det fungerar som det ska!