2014-06-18 5 views
0

Voici mon fichier en cours htaccess:.htaccess Règles Réécrire multiples/priorisation

RewriteEngine On 

RewriteCond %{HTTP_HOST} !^www\.website\.com [NC] 
RewriteCond %{HTTP_HOST} ([^.]+)\.website\.com [NC] 
RewriteRule ^(.*)$ http://www.website.com/gotourl.php?urlid=?%1 [L] 
RewriteRule ^(\w+)$ ./gotourl.php?urlid=$1 [NC,L]  
RewriteRule ^(\w+)/$ ./gotourl.php?urlid=$1 [NC,L] 

Le site en question est un raccourcisseur d'URL, je travaille pour le test/développement et un usage personnel. Le code ci-dessus n'est peut-être pas idéal car je ne connais pas très bien le .htaccess et je l'ai fait via googling et testing. Ce fait ce que je veux qu'il l'aspect de raccourcissement d'URL:

http://website.com/1234 -> http://website.com/gotourl.php?urlid=1234 
http://website.com/1234/ -> http://website.com/gotourl.php?urlid=1234 

Le problème est que je ne peux pas comprendre comment l'obtenir pour ignorer certains répertoires. Je veux des répertoires spécifiques pour aller à des pages spécifiques:

http://website.com/img (or) http://website.com/img/ -> http://website.com/img.php 
http://website.com/img/1234 (or) http://website.com/img/1234/ -> http://website.com/viewimage.php?imgid=1234 

Le principal problème est que je ne sais pas comment faire correctement cela et les façons que j'ai essayé de le faire serait toujours à réécrire:

http://website.com/gotourl.php?urlid=XXXX 

ou se retrouver dans une boucle infinie de redirections au lieu d'aller à la page spécifique que je veux. Toute aide est appréciée.

Essentiellement, je suis à la recherche de l'aide à écrire mon htaccess pour effectuer les opérations suivantes:

URL user visits -> URL user sees 
http://website.com/img -> http://website.com/img.php 
http://website.com/img/XXXX -> http://website.com/viewimage.php?imgid=XXXX 
http://website.com/XXXX -> http://website.com/gotourl.php?urlid=XXXX 

Tous les chemins doivent travailler avec ou sans slash.

Vous cherchez de l'aide pour le faire avec peut-être un peu d'explication sur ce que signifie réellement chaque ligne pour que je puisse en tirer des leçons.

+0

juste un FYI, 'http: // website.com/img' n'est pas un sous-domaine. Un exemple d'URL de sous-domaine: 'http: // test.website.com/img'. 'test' est le sous-domaine. 'img' est le chemin. Même 'www' est techniquement un sous-domaine d'un site Web. –

+0

@JonathanKuhn - Duh. Je le sais aussi: P Désolé. Modification maintenant pour se débarrasser de tous ces sous-domaines. Je voulais dire répertoire: P – Jetteh22

+0

Vous pourriez probablement juste utiliser une condition comme: 'RewriteCond% {REQUEST_FILENAME} .php -f' pour vérifier si le chemin demandé + .php existe et ensuite réécrire dans ce fichier. –

Répondre

0

La principale chose que vous voulez changer est de rendre votre règle plus spécifique. Votre URL raccourcie ne peut probablement pas contenir de barre oblique ou de point, vous pouvez donc modifier l'URL de raccourcissement de l'URL en: RewriteRule ^([^/\.]+)/?$ gotourl.php?urlid=$1 [NC,L]. Vous devrez empêcher 'gotourl.php' de faire correspondre cela. La règle pour img seul est plus spécifique et devrait être faite en premier. La règle pour img/quelque chose est un peu moins spécifique et peut être n'importe où.

RewriteEngine On 

RewriteRule ^img/?$ img.php [L] 
RewriteRule ^img/([^/]+)/?$ viewimage.php?imgid=$1 [L] 
RewriteCond %{HTTP_HOST} !^www\.website\.com [NC] 
RewriteCond %{HTTP_HOST} ([^.]+)\.website\.com [NC] 
RewriteRule ^(.*)$ http://www.website.com/gotourl.php?urlid=%1 [L] 
RewriteRule ^([^/\.]+)/?$ gotourl.php?urlid=$1 [NC,L] 
+0

Cela a fonctionné pour le raccourcissement d'URL et aussi pour le/img/XXXX mais cela n'a pas fonctionné pour le régulier/img /. Cela essaie toujours de tirer de gotourl.php? Urlid = img qui donne une erreur parce que l'URL courte img n'existe pas. – Jetteh22

+0

Avez-vous recopié le code ci-dessus (c'est-à-dire: avez-vous les règles dans le même ordre)? – Sumurai8

+0

Oui - Copié et collé sans rien changer sauf 'site web' au bon domaine. – Jetteh22