2017-09-21 1 views
-1

Apache에서 [301]을 리디렉션하지만 Joomla CMS에 필요한 다른 규칙이있는 데 대한 질문입니다.Apache 2.4에서 Joomla를 실행 한 후 이전 URL 리디렉션

우리는 Joomla 3로 웹 사이트를 다시 시작했습니다. 이전 버전은 다른 CMS였습니다. 이제 이전 URL을 새 위치로 리디렉션하고 싶습니다.

문제가 해결되지 않는 것 같습니다. 나는 우리의 모든 경우 (거의 300)에 맞는 해결책을 원합니다.

RewriteRule ^/index\.php\?CID=1$ http://%{HTTP_HOST}/ [R=301,L] 

또는

RedirectMatch 301 ^/index\.php\?CID=1$/

경우 :

/index.php?CID=1 =>/
/index.php?CID=2&Kat=1$ =>/
/index.php?CID=3&Kat=2&PID=100 => /new/path 
/old/path/file.extention => /new/file/path 
/old/page.html => /new/page 
/show_image.php?image=123456.jpg&text=Very%20Long%TEXT => /new/path/location 
/show_image.php?image=654321.jpg&text=Very%20Long%TEXT => /other/path/location 

내가 몇 가지의 RewriteRules처럼 이미 시도 : 여기

우리가 리디렉션 같은 몇 가지 예 (구 => 새을)입니다 일부 URL은 RedirectMatch 버전이 작동하지만 대부분은 그렇지 않습니다. 특별히 /index.php와 함께 표시되는 모든 URL이 아닙니다. 이것은 Joomla의 진입 점이기 때문에 e.

Joomla RewriteRule이 활성화되기 전에 /index.php로 시작되면 구체적인 URL을 리디렉션 할 수 있습니까?

RewriteEngine이 켜져 있고 Joomla와 함께 제공되는 기본 htaccess로 작업 중입니다. SEF URL 및 URL 재 작성이 사용됩니다.

올바른 방향으로 몇 가지 힌트를주세요. 내가 솔루션 나 자신을 찾을 한편

<IfModule autoindex> 
    IndexIgnore * 
</IfModule> 

Options +FollowSymlinks 
Options -Indexes 

RewriteEngine On 

RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR] 
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR] 
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] 
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) 
RewriteRule .* index.php [F] 

RewriteBase/
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 
RewriteCond %{REQUEST_URI} !^/index\.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php [L] 

답변

0

내가 여기 당신과 함께 공유하고 싶은 : 당신이 그것을 모르는 경우 들으

여기

은 기본 줌라 htaccess로 설정합니다.

그래서 주요 문제는 쿼리 문자열로 URL을 리디렉션하려는 경우 리디렉션이나 RedirectMatch를 사용할 수 없다는 것입니다. 쿼리 문자열 다시 쓰기 조건을 사용하여 다시 쓰기 규칙을 사용해야하므로 그 주위에 방법이 없습니다. 그러면 몇 줄의 URL (원하는 내용이 아님)에 대해 적어도 두 줄이 끝나고, 한 줄 내에서 작동 할 쿼리 문자열이없는 URL로 끝납니다.

그래서 여기에 주어진 예제에 대한 몇 가지 솔루션입니다 :

/index.php?CID=1 =>/
/index.php?CID=2&Kat=1$ =>/

에만 쿼리 문자열이 다르지만 파일/경로 (의 index.php)와 대상 (/는) 우리가 할 수있는 동일하기 때문에 A 또는 플래그로 재 작성 조건을 연결 :

RewriteCond %{QUERY_STRING} ^CID=29$ [OR] 
RewriteCond %{QUERY_STRING} ^CID=2&Kat=1$ 
RewriteRule ^index\.php$ /? [R=301,L] 

무력하다는 여기하면 입니까? 마지막 줄에 / 만 대상에 넣으면 아파치는 예를 들어로 리디렉션됩니다. /?CID = 29하지 다음과 같이

/index.php?CID=3&Kat=2&PID=100 => /new/path 
/show_image.php?image=123456.jpg&text=Very%20Long%TEXT => /new/path/location 
/show_image.php?image=654321.jpg&text=Very%20Long%TEXT => /other/path/location 

사람들이 해결할 수있는 문제가 매우 유사 그것을해야 할 쿼리 문자열에 다른 예를 들어 단지 /

:

RewriteCond %{QUERY_STRING} ^CID=3&Kat=2&PID=100$ 
RewriteRule ^index\.php$ /new/path? [R=301,L] 

RewriteCond %{QUERY_STRING} ^image=123456\.jpg&text=Very%20Long%TEXT$ 
RewriteRule ^show_image\.php$ /new/path/location? [R=301,L] 

RewriteCond %{QUERY_STRING} ^image=654321\.jpg&text=Very%20Long%TEXT$ 
RewriteRule ^show_image\.php$ /other/path/location? [R=301,L] 

있습니다 을 추가해야합니까?도 끝에 있습니다.

쿼리 문자열이없는 모든 예제의 경우 정상적으로 작동합니다. 여기 내가 언급 한 그 예를 몇 가지 :

/old/path/file.extention => /new/file/path 
/old/page.html => /new/page 

우리는 단지 이런 식으로 리디렉션 :

RewriteRule ^old/path/file\.extention$ /new/file/path [R=301,L] 
RewriteRule ^old/page\.html$ /new/page [R=301,L] 

일부 추가 발언 :

때문에 다시 쓰기 규칙 패턴 (원본 파일/경로) 또는 재 작성 조건 패턴 (이 경우 쿼리 문자열)은 항상 doth가 "임의의 문자"를 의미하는 정규 표현식으로 해석됩니다. 항상 앞에있는 \을 넣어서 올바른 파일이나 쿼리 만 일치시킵니다 문자열이 아니라 일부 시뮬레이션 "index-php"또는 "index7php"와 같은 ilar 파일. 다른 RegEx 특정 문자 (예 :. + 또는 *) 당신도 똑같이해야합니다.

원본 URL에 공백이 포함 된 다시 쓰기 규칙 패턴을 사용했는데 500 오류가 발생하지만 다시 작성 규칙 패턴을 큰 따옴표로 묶어서 매우 간단하게 해결할 수 있습니다.

이것은 Apache 2.4에서 작동합니다. 도움이되기를 바랍니다. 사용자 정의 리디렉션이 있어야 할 곳에 당신이 그것을 넣어해야 줌라 오는 htaccess로 파일에이를 배치하고자하는 방법의 모든 내용은

RewriteBase / 전에이다

관련 문제