2013-07-03 5 views
2

Pour une raison quelconque, j'ai soudainement du mal à faire fonctionner mon Redirect 301s. Le fichier .htaccess est ci-dessous. Je n'ai collé que les 10 premières commmandes 10 Redirect 301 mais il y en a plus de 100.Redirection 301 efficace seulement quelques URLs

Les redirections 301 ont toutes le même format, mais les six premières listées n'ont aucun effet. Les quatre derniers (suivis de "**") fonctionnent comme prévu. Je ne peux voir aucune explication.

Des idées?

Options +FollowSymLinks 

## Mod_rewrite in use. 

RewriteEngine On 

## Begin - Rewrite rules to block out some common exploits. 
# If you experience problems on your site block out the operations listed below 
# This attempts to block the most common type of exploit `attempts` to Joomla! 
# 
# Block out any script trying to base64_encode data within the URL. 
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR] 
# Block out any script that includes a <script> tag in URL. 
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR] 
# Block out any script trying to set a PHP GLOBALS variable via URL. 
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] 
# Block out 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 homepage 
RewriteRule .* index.php [F] 
# 
## End - Rewrite rules to block out some common exploits. 

########## Begin - Custom redirects 
RewriteCond %{HTTP_HOST} ^www\.caringcompanion\.net [NC] 
RewriteRule (.*) http://caringcompanion.net/$1 [R=301,L,NC] 

Redirect 301 /homecare/10-caring-companion/index.php?option=com_content&view=article&id=89&Itemid=75 http://www.caringcompanion.net/concord-ma 

Redirect 301 /homecare/10-caring-companion/index.php?option=com_content&view=article&id=94&Itemid=75 http://caringcompanion.net/cambridge-ma 

Redirect 301 /homecare/10-caring-companion/index.php?option=com_content&view=article&id=94&Itemid=74 http://caringcompanion.net/cambridge-ma 

Redirect 301 /index.php?option=com_content&view=article&id=94:cambridge-ma-home-care-elderly-caregivers&catid=38:cambridge&Itemid=74 http://caringcompanion.net/cambridge-ma 

Redirect 301 /index.php?option=com_content&view=article&id=93:acton-ma-home-care-elderly-caregivers&catid=34:acton&Itemid=70 http://caringcompanion.net/acton-ma 

Redirect 301 /homecare/10-caring-companion/index.php?option=com_content&view=article&id=93&Itemid=70 http://caringcompanion.net/acton-ma 

Redirect 301 /homecare-ma/ma/index.php?option=com_content&view=article&id=52&Itemid=158 http://caringcompanion.net/homecare-massachuetts-maine-new-hampshire 

Redirect 301 /tag/71-biophilia http://caringcompanion.net/services/client-care-coordinators *********** 

Redirect 301 /ccc-copyright-notice/73-caring-companion/services/127-alzheimers-dementia-services http://caringcompanion.net/services/alzheimers-dementia ********* 

Redirect 301 /index.php/component/content/article/73-caring-companion/services/127-alzheimers-dementia-services http://caringcompanion.net/services/alzheimers-dementia ****** 

Redirect 301 /jblog/118-alzheimers-dementia http://caringcompanion.net/services/alzheimers-dementia *********************** 

Répondre

0

L'explication est que vous ne pouvez pas correspondre à la chaîne de requête dans le modèle d'une déclaration Redirect ou RedirectMatch. La déclaration:

Redirect 301 /homecare/10-caring-companion/index.php?option=com_content&view=article&id=89&Itemid=75 http://www.caringcompanion.net/concord-ma 

tente En fait correspondre contre cette URI:

/homecare/10-caring-companion/index.php%3Foption=com_content%26view=article%26id=89%26Itemid=75 

Et pas la chaîne de requête (tout après la ?). Vous devez utiliser le %{QUERY_STRING} var de mod_rewrite pour faire correspondre cela. Donc, quelque chose comme ceci:

RewriteCond %{QUERY_STRING} ^option=com_content&view=article&id=89&Itemid=75$ 
RewriteRule ^/?homecare/10-caring-companion/index\.php$ http://caringcompanion.net/concord-ma [L,R=301] 

RewriteCond %{QUERY_STRING} ^option=com_content&view=article&id=94&Itemid=75$ [OR] 
RewriteCond %{QUERY_STRING} ^option=com_content&view=article&id=94&Itemid=74$ 
RewriteRule ^/?homecare/10-caring-companion/index\.php$ http://caringcompanion.net/cambridge-ma [L,R=301] 

RewriteCond %{QUERY_STRING} ^option=com_content&view=article&id=94:cambridge-ma-home-care-elderly-caregivers&catid=38:cambridge&Itemid=74$ 
RewriteRule ^/?index\.php$ http://caringcompanion.net/cambridge-ma [L,R=301] 

RewriteCond %{QUERY_STRING} ^option=com_content&view=article&id=93:acton-ma-home-care-elderly-caregivers&catid=34:acton&Itemid=70$ 
RewriteRule ^/?index\.php$ http://caringcompanion.net/action-ma [L,R=301] 

RewriteCond %{QUERY_STRING} ^option=com_content&view=article&id=93&Itemid=70$ 
RewriteRule ^/?homecare/10-caring-companion/index\.php$ http://caringcompanion.net/action-ma [L,R=301] 

RewriteCond %{QUERY_STRING} ^option=com_content&view=article&id=52&Itemid=158$ 
RewriteRule ^/?homecare-ma/ma/index.php$ http://caringcompanion.net/homecare-massachuetts-maine-new-hampshire [L,R=301] 

Selon ce que vous avez d'autres de Redirect, vous pourriez trouver que vous obtenez redirigé vers des URL inattendues que vous n'avez pas explicitement. Il est possible que les règles de réécriture (mod_rewrite) et les redirections (mod_alias) interfèrent parce que les deux modules sont appliqués à différents points du moteur de mappage de fichiers URL, et que les deux modules peuvent se retrouver avec le même URI. Si cela se produit, vous ne devriez utiliser que mod_rewrite pour vos redirections car vous avez besoin que le moteur de réécriture corresponde à la chaîne de requête.

+0

Jon, merci beaucoup. Dans mon cas, je voulais supprimer complètement la chaîne de requête, donc j'ai dû ajouter '?' à la fin de l'URL de remplacement pour obtenir le résultat que je veux et maintenant c'est parfait. –