webForumDet fria alternativet

.htaccess regel, hur fixar jag detta?

Webbservrar

7 svar · 721 visningar · startad av UrMe

Medlem sedan apr. 2001762 inlägg
Frågan#1

Har skrivit en .htaccess regel som funkar så här:

RewriteRule ^nick/([^/]+)/ /public_html/index.php?nick=$1

T.ex om man skriver http://www.minadress.com/nick/tjoho/
Så tolkas det som http://www.minadress.com/index.php?nick=tjoho

Problemet är att jag vill skriva om det så att:
http://www.minadress.com/tjoho/ funkar, så jag slipper /nick/ i adressen.

Men eftersom jag har sidor som ligger under http://www.minadress.com/ t.ex http://www.minadress.com/admin/
http://www.minadress.com/andrasubfoldrar/
etc

Så krockar ju detta.

Hur kan jag exkludera vissa underkataloger i .htaccess filen?
Helst även att man slipper skriva / på slutet också, så det räcker med http://www.minadress.com/tjoho

Medlem sedan juni 20006 031 inlägg
#2

Flyttad från PHP

Medlem sedan apr. 2001762 inlägg
#3

Hittade detta:

RewriteCond %{REQUEST_URI} !admin
RewriteCond %{REQUEST_URI} !entillkatalog
RewriteCond %{REQUEST_URI} !index.php

Om jag gör om regeln till

RewriteRule ^(.*)/$ /public_html/index.php?nick=$1

Så fungerar det, men om jag tar bort / (slashen) så får jag Internal Server Error.. hur ska jag fixa detta?

Medlem sedan apr. 2001762 inlägg
#4

Så här ser hela ut nu:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !admin
RewriteCond %{REQUEST_URI} !css
RewriteCond %{REQUEST_URI} !images
RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /public_html/index.php?nick=$1
RewriteRule ^(.*)/$ /public_html/index.php?nick=$1

Nu kan jag skriva http://www.minadress.com/tjoho och det funkar, men om jag skriver http://www.minadress.com/admin så pekar den ändå på http://www.minadress.com/index.php?nick=admin, vilket blir fel då :(

Medlem sedan mars 2001185 inlägg
#5

Om du varken vill matcha på "admin" eller "andrassubfoldrar" bör detta fungera:

# Hoppa även över funna kataloger
RewriteCond %{REQUEST_FILENAME} !-d
Medlem sedan apr. 2001762 inlägg
#6

Fick till det med lite hjälp från ett annat forum.

Slutresultatet blev detta:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /index.php?nick=$1

Då fungerar det med både slash och utan slash, och krockar inte med kataloger/filer som existerar.

Medlem sedan juni 20014 421 inlägg
#7

om någon skulle få för sig att heta admin eller css då? :)

Medlem sedan mars 20041 505 inlägg
#8

Döp alla "riktiga" mappar med prefix, t.ex. underscore: _admin eller _css.
Då skiljer du dessa enkelt från nicknames. T.ex:
http://www.minadress.com/\_admin/
http://www.minadress.com/admin/

Sen bygger du ett pattern som ignorerar allt som börjar med underscore.

:)

257 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)