>

누군가가 내가 뭘 잘못하고 있는지 알 수 있지만 여기에 이야기가 있습니다 ...

현재 내 사이트 URL은 전자 상거래 소프트웨어에 의해 제품 및 카테고리 이름에서 자동 생성되므로 제품/카테고리 이름에 영숫자가 아닌 문자가 포함되어 있으면 URL로 인코딩됩니다. EG :

mysite.com/Shop/Furniture-Set-Large-Table%2C-4-Chairs.html

제품 이름에서 URL을 자동 생성하지만 영숫자가 아닌 문자를 모두 제거 할만큼 영리한 새로운 전자 상거래 솔루션으로 이동하고 있습니다. 또한 소문자로 변환되어 대문자를 소문자로 리디렉션하는 htaccess 솔루션을 찾았습니다. 또한 htaccess를 통해 해결할 수있는 URL의 '쇼핑'부분이 없습니다. EG :

mysite.com/furniture-set-large-table-4-chairs.html

'Shop'부분을 제거하려면 :

RedirectMatch 301 ^/Shop/(.*)$ http://www.mysite.com/$1

404 오류를 방지하기 위해 대문자를 소문자로 바꾸려면 :

RewriteCond %{REQUEST_URI} [A-Z]
RewriteCond %{REQUEST_FILENAME} !\.(?:png|gif|ico|swf|jpg|jpeg|js|css|php|pdf)$
RewriteRule (.*) ${lc:http://www.mysite.com/$1} [R=301,L]

이 둘은 완벽하게 작동합니다.

따라서 URL에서 인코딩 된 문자를 제거하려면 htaccess 규칙 또는 여러 규칙이 필요합니다. 소프트웨어가 URL을 "Table % 2C-4-Chairs"로 생성하므로 % 2C 만 제거하면되므로 교체 할 필요는 없습니다.

URL에서 다음과 같은 특정 문자 인코딩을 제거해야합니다 :

쉼표 (% 2C), 아포스트로피 (% 27), 콜론 (% 3A) 등

아무도 적절한 htaccess 규칙을 알려줄 수 있습니까?

미리 감사합니다.

  • 답변 # 1

    URI는 다시 쓰기 엔진을 통해 전송되기 전에 URL로 인코딩되므로 인코딩 된 문자가 아닌 실제 문자와 일치 시키려고합니다.

    RewriteRule ^(.*),(.*)$ /$1$2 [L]
    RewriteRule ^(.*):(.*)$ /$1$2 [L]
    RewriteRule ^(.*)\'(.*)$ /$1$2 [L]
    RewriteRule ^(.*)\"(.*)$ /$1$2 [L]
    # etc...
    RewriteCond %{ENV:REDIRECT_STATUS} 200
    RewriteRule ^(.*)$ http://www.mysite.com/$1 [L,R=301]
    
    

    리다이렉션 상태는 위의 규칙 중 하나라도 적용되면 (따라서 내부 리다이렉트 상태 값을 200으로 만든다) 리다이렉트해야한다는 것을 mod rewrite에게 알려준다. 모든 특수 문자 확인.

    이러한 규칙은 모든 리디렉션의전에모든 규칙의 해당 인스턴스를 반복하고 제거 할 수 있도록해야합니다. 그런 다음 더 이상 특수 문자가 없으면 다시 쓰기 엔진이 리디렉션이있는 위치로 흘러 갈 수 있습니다.

    mod_alias RedirectMatch 를 제거 할 것을 제안합니다  지시어를 다시 작성 규칙으로 바꿉니다. 때로는 2 개의 모듈을 결합하고 두 모듈을 모두 단일 URI에 영향을 주면 예기치 않은 결과가 발생할 수 있습니다. 위의 모든 규칙을이전하기 전에 다음을 수행해야합니다.

    RewriteRule ^Shop/(.*)$ /$1 [L]
    
    
    /Shop/ 의 제거를 추가  특수 문자 체인에서. 그러면 마지막 규칙은 다음과 같습니다.

    RewriteCond %{REQUEST_URI} [A-Z]
    RewriteCond %{REQUEST_FILENAME} !\.(?:png|gif|ico|swf|jpg|jpeg|js|css|php|pdf)$
    RewriteRule (.*) ${lc:http://www.mysite.com/$1} [R=301,L]
    
    

관련 자료

  • 이전 Android FirebaseUI를 사용하여 Firebase에서 쿼리를 페이징하는 방법
  • 다음 Javascript getElementsByNamevalue가 작동하지 않습니다