Première fois à jouer avec htaccess pour créer un projet pretty-url avec une structure de projet PHP simple. J'ai mes jolies URL sur OK-ish, le seul problème que j'ai, pour l'instant, c'est que mon CSS / media / ... n'est pas chargé sur la page.

Voici le code htaccess que j'utilise:

RewriteEngine on

# localhost
RewriteBase /project/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?p=$1
RewriteRule ^(.*)/(.*)$ index.php?p=$1&id=$2

# fix trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [R=301,L]

Tout doit être acheminé vers le fichier index.php et mon modèle général ressemblerait à ceci:

.com/desktops
.com/laptops
.com/desktop/Intel-Core-i5-Gaming
.com/laptop/Intel-Core-i5-Gaming

J'espère que quelqu'un d'entre vous pourra m'apprendre un peu de sagesse à ce sujet! :)

0
Nerdben 30 déc. 2015 à 14:58

2 réponses

Meilleure réponse

Cela devrait fonctionner.

RewriteCond ${REQUEST_URI} ^.+$
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml)$ [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]

OU il existe 3 façons différentes de résoudre ce problème:

Utilisez des chemins absolus pour les fichiers images, css et js, c'est-à-dire commencez votre chemin avec / ou http: //

Une autre consiste à utiliser la balise href de base dans la section de tête HTML comme ceci:

<base href="http://www.example.com/">

La troisième option est via mod_rewrite

Mettez ces lignes au-dessus de votre autre RewriteLine dans votre fichier .htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{DOCUMENT_ROOT}/$1 -f
RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif))$ /$1 [L,R=301,NC]
0
Ninju 30 déc. 2015 à 12:23

Si vous avez ajouté votre CSS comme:

<link rel="stylesheet" href="CSS/media/..." />

Cela ne fonctionnera pas, à cause de votre routage, cela va à différents endroits, comme entrer dans un sous-domaine (qui n'existe pas en fait). Pensez donc à utiliser le chemin relatif du domaine:

<link rel="stylesheet" href="/CSS/media/..." />
<!---------------------------^ add a slash here.
0
Praveen Kumar Purushothaman 30 déc. 2015 à 12:02