2017-10-16 28 views
3

Hi fellow developers.htaccess comment ne pas réécrire certaines URL

J'écris un site Web hybride qui contient des pages statiques comme index.php, page1.php ... et un Nibbleblog qui est installé dans le répertoire de niveau supérieur au même niveau que le site Web statique. Pour activer les URL friendly SEO dans le blog, j'ai ajouté à htaccess les règles de réécriture suivantes, comme recommandé par Nibbleblog.

Le RewriteBase /eurotint/new-euroting/app/ est mon répertoire en cours de développement local

RewriteBase /eurotint/new-euroting/app/ 
RewriteRule ^category/([^/]+)/page-([0-9]+)$ blog.php?controller=blog&action=view&category=$1&number=$2 [L] 
RewriteRule ^category/([^/]+)/$ blog.php?controller=blog&action=view&category=$1&number=0 [L] 
RewriteRule ^tag/([^/]+)/page-([0-9]+)$ blog.php?controller=blog&action=view&tag=$1&number=$2 [L] 
RewriteRule ^tag/([^/]+)/$ blog.php?controller=blog&action=view&tag=$1&number=0 [L] 
RewriteRule ^page-([0-9]+)$ blog.php?controller=blog&action=view&number=$1 [L] 
RewriteRule ^post/([^/]+)/$ blog.php?controller=post&action=view&post=$1 [L] 
RewriteRule ^post-([0-9]+)/(.*)$ blog.php?controller=post&action=view&id_post=$1 [L] 
RewriteRule ^page/([^/]+)/$ blog.php?controller=page&action=view&page=$1 [L] 
RewriteRule ^feed/$ feed.php [L] 
RewriteRule ^([^/]+)/$ blog.php?controller=page&action=$1 [L] 

Maintenant le problème:

Cela fonctionne bien pour permettre à l'URL SEO friendly dans le blog, mais si je par exemple entré le poste de blog avec adresse par exemple websiteAddress/eurotint/new-euroting/app/post/accueil post/

Ensuite, chaque fois que je clique sur l'une des adresses de pages statiques (index, page1, page2) tout en étant sur cette ou une autre page de blog-à-dire les catégories etc.

La règle de réécriture redirige l'adresse à quelque chose de similaire à: websiteAddress/eurotint/new-euroting/app/post/accueil post/index.php

Mais je ne wan't pas les adresses statiques réécrites par exemple en cliquant sur le bouton page d'accueil devrait me prendre à la page d'index websiteAddress/eurotint/new -euroting/app/index.php et non websiteAddress/eurotint/new-euroting/app/post/welcome-post/index.php

J'ai essayé quelques redirections 301 pour les noms de fichiers que je ne veux pas rediriger vers la page de blog, mais aucun d'entre eux a travaillé et tbh. Je ne suis pas expert dans les règles de réécriture d'Apache.

En outre, toutes les URL d'images du site statique, etc. sont également réécrites alors que dans le blog/catégorie de poste, je voudrais arrêter cela aussi, et seulement réécrire les URL qui sont liées à la Blog.

Toute aide sur la façon d'y parvenir sera grandement appréciée, merci.

Répondre

0

Probablement la meilleure façon de le faire avec est avec fichier et répertoire conditions - mais parce que RewriteCond affecte uniquement la règle suivante vous devez soit ajouter ces conditions avant chaque règle, ou créer une règle de saut:

RewriteBase /eurotint/new-euroting/app/ 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .* - [S=10] 
RewriteRule ^category/([^/]+)/page-([0-9]+)$ blog.php?controller=blog&action=view&category=$1&number=$2 [L] 
RewriteRule ^category/([^/]+)/$ blog.php?controller=blog&action=view&category=$1&number=0 [L] 
RewriteRule ^tag/([^/]+)/page-([0-9]+)$ blog.php?controller=blog&action=view&tag=$1&number=$2 [L] 
RewriteRule ^tag/([^/]+)/$ blog.php?controller=blog&action=view&tag=$1&number=0 [L] 
RewriteRule ^page-([0-9]+)$ blog.php?controller=blog&action=view&number=$1 [L] 
RewriteRule ^post/([^/]+)/$ blog.php?controller=post&action=view&post=$1 [L] 
RewriteRule ^post-([0-9]+)/(.*)$ blog.php?controller=post&action=view&id_post=$1 [L] 
RewriteRule ^page/([^/]+)/$ blog.php?controller=page&action=view&page=$1 [L] 
RewriteRule ^feed/$ feed.php [L] 
RewriteRule ^([^/]+)/$ blog.php?controller=page&action=$1 [L] 

les conditions (RewriteCond) indiquent que si le nom de fichier demandé est un fichier ou un répertoire - skip the next 10 rules, s o devrait sauter toutes vos règles de réécriture.

Ceci suppose qu'aucune de vos correspondances de réécriture définies ne pointe sur des fichiers/répertoires existants (par exemple, vous n'avez pas vraiment de répertoire appelé feed).

+0

Salut, merci pour votre réponse, j'ai essayé votre suggestion, mais je ne pouvais pas le faire fonctionner. J'ai fini par utiliser l'adresse URL complète du Web dans la barre de navigation pour résoudre ce problème, c'est-à-dire que j'ai utilisé https: // www. Adresse web. com/filreUrl, je sais que ce n'est pas idéal mais cela résout ce problème particulier. – Kugarek