htaccess suppression préfixe "product-category" et "product"

WRInaute discret
Bonjour,

Je suis absolument pas à l'aise avec le htaccess.
la seul chose que je sais faire c'est des redirections 301 d'url.

pour toutes les catégories produits et pour tous les produits le site affiche un préfixe:
exemple:

example.com/product-categoriy/webrankinfo/techniques
example.com /product-categoriy/webrankinfo/seo

j'aimerai une règle htaccess qui supprime le préfixe " product-category "

example.com/webrankinfo/techniques
example.com /webrankinfo/seo

De même pour les produits

example.com /product/webrankinfo

j'aimerai une règle htaccess qui supprime le préfixe " product "

Attention !!! comme indiqué au début de se post, je suis nul en code et en htaccess. J'aimerai bien un code à copier collé :)
J'ai essayé avec des plugin comme permalink etc... mais c'est pas très propre et cela fait plus de mal à l'ensemble de mon site.

Merci par avance pour votre aides précieuse.

Bonne journée

Cordialement

Charles H
 
Dernière édition par un modérateur:
WRInaute impliqué
Apache config:
RewriteCond %{REQUEST_FILENAME} !-d [AND]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^product\-category/(.*)$ /$1 [L,QSA]
 
WRInaute discret
Merci @emualliug pour le retour et le code.

Je dois vraiment être nul :)

J'ai essayé de copié collé dans mon htaccess mais cela entraine une erreur 500 sur tout le site.
Pour information:
site wordpress à jour
hébergement O2 switch

2 préfixes à faire supprimer
/product-categoriy/
/product

Merci si vous pouviez m'aider encore un peu

Cordialement

Charles H
 

Fichiers joints

  • end-htaccess.jpg
    end-htaccess.jpg
    153.6 KB · Affichages: 3
  • htaccess.jpg
    htaccess.jpg
    124.3 KB · Affichages: 3
WRInaute impliqué
Tu veux pas faire un copier / coller du htaccess plutôt qu'un screen.

Si erreur 500 c'est qu'il y a un blem quelque part
2 préfixes à faire supprimer
/product-categoriy/
/product
du coup :
Apache config:
RewriteRule ^product(\-category)?/(.*)$ /$2 [L,QSA]
 
WRInaute discret
merci beaucoup.
voilà la copie:
Code:
# BEGIN WP Rocket v3.5.1
# Use UTF-8 encoding for anything served text/plain or text/html
AddDefaultCharset UTF-8
# Force UTF-8 for a number of file formats
<IfModule mod_mime.c>
AddCharset UTF-8 .atom .css .js .json .rss .vtt .xml
</IfModule>
# FileETag None is not enough for every server.
<IfModule mod_headers.c>
Header unset ETag
</IfModule>
# Since we’re sending far-future expires, we don’t need ETags for static content.
# developer.yahoo.com/performance/rules.html#etags
FileETag None
<IfModule mod_alias.c>
<FilesMatch "\.(html|htm|rtf|rtx|txt|xsd|xsl|xml)$">
<IfModule mod_headers.c>
Header set X-Powered-By "WP Rocket/3.5.1"
Header unset Pragma
Header append Cache-Control "public"
Header unset Last-Modified
</IfModule>
</FilesMatch>
<FilesMatch "\.(css|htc|js|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|json|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$">
<IfModule mod_headers.c>
Header unset Pragma
Header append Cache-Control "public"
</IfModule>
</FilesMatch>
</IfModule>
# Expires headers (for better cache control)
<IfModule mod_expires.c>
    ExpiresActive on
    # Perhaps better to whitelist expires rules? Perhaps.
    ExpiresDefault                              "access plus 1 month"
    # cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
    ExpiresByType text/cache-manifest           "access plus 0 seconds"
    # Your document html
    ExpiresByType text/html                     "access plus 0 seconds"
    # Data
    ExpiresByType text/xml                      "access plus 0 seconds"
    ExpiresByType application/xml               "access plus 0 seconds"
    ExpiresByType application/json              "access plus 0 seconds"
    # Feed
    ExpiresByType application/rss+xml           "access plus 1 hour"
    ExpiresByType application/atom+xml          "access plus 1 hour"
    # Favicon (cannot be renamed)
    ExpiresByType image/x-icon                  "access plus 1 week"
    # Media: images, video, audio
    ExpiresByType image/gif                     "access plus 4 months"
    ExpiresByType image/png                     "access plus 4 months"
    ExpiresByType image/jpeg                    "access plus 4 months"
    ExpiresByType image/webp                    "access plus 4 months"
    ExpiresByType video/ogg                     "access plus 1 month"
    ExpiresByType audio/ogg                     "access plus 1 month"
    ExpiresByType video/mp4                     "access plus 1 month"
    ExpiresByType video/webm                    "access plus 1 month"
    # HTC files  (css3pie)
    ExpiresByType text/x-component              "access plus 1 month"
    # Webfonts
    ExpiresByType font/ttf                      "access plus 4 months"
    ExpiresByType font/otf                      "access plus 4 months"
    ExpiresByType font/woff                     "access plus 4 months"
    ExpiresByType font/woff2                    "access plus 4 months"
    ExpiresByType image/svg+xml                 "access plus 1 month"
    ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
    # CSS and JavaScript
    ExpiresByType text/css                      "access plus 1 year"
    ExpiresByType application/javascript        "access plus 1 year"
</IfModule>
# Gzip compression
<IfModule mod_deflate.c>
# Active compression
SetOutputFilter DEFLATE
# Force deflate for mangled headers
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
# Don’t compress images and other uncompressible content
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png|rar|zip|exe|flv|mov|wma|mp3|avi|swf|mp?g|mp4|webm|webp|pdf)$ no-gzip dont-vary
</IfModule>
</IfModule>
# Compress all output labeled with one of the following MIME-types
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE application/atom+xml \
                                  application/javascript \
                                  application/json \
                                  application/rss+xml \
                                  application/vnd.ms-fontobject \
                                  application/x-font-ttf \
                                  application/xhtml+xml \
                                  application/xml \
                                  font/opentype \
                                  image/svg+xml \
                                  image/x-icon \
                                  text/css \
                                  text/html \
                                  text/plain \
                                  text/x-component \
                                  text/xml
</IfModule>
<IfModule mod_headers.c>
Header append Vary: Accept-Encoding
</IfModule>
</IfModule>
<IfModule mod_mime.c>
AddType text/html .html_gzip
AddEncoding gzip .html_gzip
</IfModule>
<IfModule mod_setenvif.c>
SetEnvIfNoCase Request_URI \.html_gzip$ no-gzip
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} on [OR]
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} https
RewriteRule .* - [E=WPR_SSL:-https]
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteRule .* - [E=WPR_ENC:_gzip]
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} =""
RewriteCond %{HTTP:Cookie} !(wordpress_logged_in_.+|wp-postpass_|wptouch_switch_toggle|comment_author_|comment_author_email_) [NC]
RewriteCond %{REQUEST_URI} !^(/(.+/)?feed/?|/(?:.+/)?embed/)$ [NC]
RewriteCond %{HTTP_USER_AGENT} !^(facebookexternalhit).* [NC]
RewriteCond "%{DOCUMENT_ROOT}/wp-content/cache/wp-rocket/%{HTTP_HOST}%{REQUEST_URI}/index%{ENV:WPR_SSL}%{ENV:WPR_WEBP}.html%{ENV:WPR_ENC}" -f
RewriteRule .* "/wp-content/cache/wp-rocket/%{HTTP_HOST}%{REQUEST_URI}/index%{ENV:WPR_SSL}%{ENV:WPR_WEBP}.html%{ENV:WPR_ENC}" [L]
</IfModule>
# END WP Rocket
# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
# BEGIN FRedirect_ErrorDocument
# Les directives (lignes) entre « BEGIN FRedirect_ErrorDocument » et « END FRedirect_ErrorDocument » sont générées
# dynamiquement, et doivent être modifiées uniquement via les filtres WordPress.
# Toute modification des directives situées entre ces marqueurs sera surchargée.
ErrorDocument 404 /index.php?error=404
# END FRedirect_ErrorDocument
 
WRInaute accro
Je t'explique :) sur un site WordPress, les urls sont créées via des règles qui permettent, via l'url de retrouver l'objet et l'id de l'objet appelés. Donc dans ton cas, un produit woocommerce (post type product) "seo", savoir qu'il va chercher le produit id 357 dont le slug (nicename) est seo.
La structure globale d'url est définie dans les réglages (permaliens) et c'est là ou tu décides de mettre juste %postname% ou de rajouter des choses avant.

Mais si tu tentes de modifier tes urls via htaccess, wordpress lui va toujours utiliser la règle définie dans réglages permaliens et donc ne retrouvera pas ses petits.

C'est ce que veut dire

# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
 
WRInaute discret
Bonsoir,

Un grand merci à toi @Marie-Aude pour toutes les explications. Donc, si je comprends bien, les dernière lignes proviennent de wordpress et non pas d'un plugin du genre All 404 Redirect to Homepage ?
J'avais réussis à modifier cela avec le plugin Premmerce Permalink Manager for WooCommerce mais par la suite cela a créer des conflits.

Donc si je met %postname% dans le permalien wordpress ( réglage ---> permalien ) au niveau de Préfixe des catégories de produit cela devrait résoudre le problème pour passer de:

____.fr/product-category/vetements/blousons/

à

____.fr/vetements/blousons/

C'est bien ça ?

Si non, comment pourrai-je trouver une solution.

Cordialement

Charles
 
WRInaute discret
Merci pour les infos @Marie-Aude,

Si j'ai mis en place des 404 vers page d'accueil c'est que j'ai supprimer beaucoup de produits et je voulais éviter trop de 404.
Je pensais que c'était plus propre que de laisser des 404 et je pensais que google préférait.
Merci pour le lien, je vais jeter un oeil.
J'ai trouver un plugin qui me semble bon pour régler mon problème facilement.
J'espère qu'il ne mettra pas le bordel dans mon site.
Le plugin en question: Permalink manager for woocommerce by Berocket
Vous connaissez?

Cordialement

@+
 
WRInaute accro
Google n'aime pas du tout les soft 404. Tu peux rediriger vers des produits ou des catégories similaires, ou faire une 404 soignée, qui propose d'autres produits mais qui reste une 404. Je ne connais pas ce plugin. Tu as toutes les infos nécessaires pour faire ce que tu veux sans plugin dans le lien que je t'ai donné.
 
Discussions similaires
Haut