2013-07-03 2 views
2

어떤 이유로 리디렉션 301이 작동하는 데 갑자기 문제가 발생했습니다. .htaccess 파일은 아래에 있습니다. 첫 번째 10 개의 리디렉션 301 명령 만 붙여 넣었지만 100 개가 넘습니다.리디렉션 301 일부 URL에만 적용

301 리디렉션은 모두 동일한 형식이지만 나열된 처음 6 개는 아무런 효과가 없습니다. 마지막 네 개 ("**"다음)는 예상대로 작동합니다. 나는 아무런 설명도 볼 수 없다.

아이디어가 있으십니까?

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 *********************** 

답변

0

설명은 당신이 Redirect 또는 RedirectMatch 문장의 패턴에서 쿼리 문자열에 대해 일치하지 않을 수 있다는 것입니다. 문 :

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

는 사실이 URI에 일치 시키려고 :

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

아닌 쿼리 문자열합니다 (? 후 다). mod_rewrite의 %{QUERY_STRING} var을 사용하여 일치해야합니다. 그래서 이런 식으로 뭔가 : 내용에 따라

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] 

다른 Redirect의 당신은, 당신은 당신이 명시 적으로하지 않았다 예상치 못한 URL로 리디렉션지고있는 것을 알 수있다. 두 모듈이 URL 파일 매핑 엔진의 다른 지점에 적용되고 두 모듈 모두 동일한 URI를 mangling 할 수 있기 때문에 다시 쓰기 규칙 (mod_rewrite)과 리디렉션 (mod_alias)이 서로 간섭 할 수 있습니다. 이 경우 쿼리 문자열과 일치하도록 다시 쓰기 엔진이 필요하기 때문에 리디렉션에 mod_rewrite를 사용해야합니다.

+0

존 감사합니다. 필자의 경우에는 쿼리 문자열을 완전히 삭제하여 '?'을 추가해야했습니다. 대체 URL의 끝에 내가 원하는 결과를 얻고 이제는 완벽합니다. –