web-dev-qa-db-fra.com

Besoin d'un code d'erreur 410 pour htaccess sur le site Joomla pour un nombre limité de pages

J'ai un site Joomla 3.9.13, utilisant Gantry 5.4.31.

J'ai un nombre limité d'articles que je souhaite supprimer de mon site et au lieu de renvoyer une erreur 404, je veux renvoyer une erreur 410.

Je ne suis pas programmeur, j'ai donc besoin d'aide pour déterminer la syntaxe et l'emplacement corrects dans le fichier .htaccess pour saisir le code.

Le nom final des articles est le suivant, et il y en a 46:

/23-10003-10054-almonds
/90-10310-10027-corn-starch
/25-anticaking-agents
/29-bulking-agents

Je voudrais connaître la syntaxe correcte pour tout ce qui les inclut, et cela pourrait inclure du texte supplémentaire avant et du texte supplémentaire après, tels que:

/item/23-10003-10054-almonds?88dkdkgdk

ou

/item/23-10003-10054-almonds/ldkdjsdhsd

De plus, j'aimerais savoir comment lui dire quelle page diffuser. Serait-ce la page d'erreur par défaut? Ou dois-je créer une autre page? Techniquement, le contenu de la page d'erreur Visual 410 sera le même que ma page d'erreur actuelle. Mais je ne sais pas comment Joomla avec Gantry construit la page d'erreur. Si c'est plus facile, je vais juste créer une page à utiliser. Quoi qu'il en soit, quelle est la syntaxe de la page .htaccess pour lui dire où trouver la page d'erreur correcte?

Ci-dessous se trouve mon fichier .htaccess actuel, avec certains éléments supprimés que je sais ne sont pas pertinents:

##
# @package    Joomla
## No directory listings

<IfModule autoindex>
  IndexIgnore *
</IfModule>

## Can be commented out if causes errors, see notes above.
Options +FollowSymlinks
Options -Indexes

## Mod_rewrite in use.

RewriteEngine On

## Begin - Rewrite rules to block out some common exploits.
# If you experience problems on your site then comment out the operations listed 
# below by adding a # to the beginning of the line.
# This attempts to block the most common type of exploit `attempts` on Joomla!
#
# Block any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root home page
RewriteRule .* index.php [F]
#
## End - Rewrite rules to block out some common exploits.

## Begin - Custom redirects
## End - Custom redirects

##
# Uncomment the following line if your webserver's URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root).
##

# RewriteBase /

## Begin - Joomla! core SEF Section.
#
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
#
## End - Joomla! core SEF Section.


## BEGIN EXPIRES CACHING - JCH OPTIMIZE ##
<IfModule mod_expires.c>
  ExpiresActive on

# Perhaps better to whitelist expires rules? Perhaps.
  ExpiresDefault "access plus 1 year"

.
.
.

AddOutputFilterByType DEFLATE font/woff2
# For Olders Browsers Which Can't Handle Compression
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>
## END EXPIRES CACHING - JCH OPTIMIZE ##
4
Thora

Vous pouvez créer 46 règles de réécriture comme celle-ci. Ils devraient entrer dans votre fichier . Htaccess avant le ## Begin - Joomla! core SEF Section.

RewriteRule ^/?23-10003-10054-almonds - [G,L]
RewriteRule ^/?90-10310-10027-corn-starch - [G,L]
RewriteRule ^/?25-anticaking-agents - [G,L]
RewriteRule ^/?29-bulking-agents - [G,L]
  • ^ Signifie que "commence par"
  • /? Est une barre oblique de départ facultative. Cela pourrait être omis dans . Htaccess . La barre oblique de départ doit être sur la règle dans les fichiers Apache .conf Et doit être omise dans . Htaccess . Le rendre facultatif avec le point d'interrogation rend la règle plus portable et peut être utilisée dans les deux endroits.
  • - Signifie laisser l'URL tranquille et ne pas la changer
  • G signifie "Fin" - envoyer le statut 410
  • L signifie "Last" - pour qu'aucune autre règle de réécriture ne soit exécutée

Ces règles vont s'exécuter pour chaque demande adressée à votre serveur Web. En avoir 46 est très bien. Si vous étendez des centaines ou des règles, cela peut nuire aux performances.

Vous pouvez également essayer de les combiner en une seule règle qui pourrait fonctionner un peu mieux: RewriteRule ^/?((23-10003-10054-almonds)|(90-10310-10027-corn-starch)|(25-anticaking-agents)|(29-bulking-agents)) - [G,L] Cependant, la règle serait très longue et pourrait être difficile à maintenir.

Il ne semble pas que Joomla prenne en charge l'envoi d'un état 410 pour les articles supprimés hors de la boîte. Le site Joomla Stack Exchange a quelques questions sur 410 codes:

Cependant, ni l'un ni l'autre ne correspond exactement à votre situation. Il vaut peut-être la peine de demander s'il existe un moyen pour que Joomla renvoie l'erreur 410 plutôt que d'essayer de le faire dans .htaccess.

1
Stephen Ostermiller