하위 폴더를 PHP를 사용하여 WordPress에서 국가 코드로 동적으로 다시 작성
이 질문이 여러 번 제기된 것을 알고 있지만 문제를 해결하기 위해 사용할 수 있는 해결책이나 예시를 찾지 못했습니다.
저는 고객 사이트에서 일하고 있습니다.두 곳의 유사한 사이트가 있는데, 하나는 자국을 위한 사이트이고, 다른 나라의 방문객들을 위한 사이트입니다.
서버의 루트에 호스팅되는 기본 사이트와 하위 폴더에 호스팅되는 두 번째 사이트.
이제 제가 원하는 것은 방문하는 사용자의 국가 코드를 가진 하위 폴더에 호스팅되는 두 번째 사이트에 대한 동적 URL 재작성입니다.
예를 들어.
http://example.com
http://example.com/subfolder/
URL 입니다.
나는 이것을 원해요.http://example.com/subfolder/
이렇게 바뀌다http://example.com/country_code/
어디에country_code
PHP 기능을 통해 ISO 형식으로 방문자 국가 코드입니다.
그래서 만약 사용자가 미국에서 왔다면.subfolder
로 변경해야 합니다.us
, 새 URL은 지금이어야 합니다.http://example.com/us/
.
페이지, 게시물, 카테고리, 태그 또는 작성자 페이지 등 모든 유형의 페이지에서 작동하기를 원합니다.
그래서 또.http://example.com/subfolder/any-type-of-url/
=>http://example.com/country_code/any-type-of-url/
기억하세요.country_code
는 ISO 형식의 사용자/방문자 국가 코드입니다.
만약 누군가 이것에 대한 더 많은 정보가 필요하면 저에게 알려주세요.미리 감사드립니다.
추신: 저는 이것을 시도했습니다.add_rewrite_rule()
WP에서 사용 가능한 기능입니다.
사용자 국가 ISO 코드를 기반으로 필터를 통해 재작성 규칙을 가장하여 수행할 수 있습니다.아래 코드를 찾아주시기 바랍니다.
function prepend_default_rewrite_rules( $rules ) {
// Prepare for new rules
$new_rules = [];
// Set up languages, except default one, get user language code
$user = get_current_user_id();
$language_slugs = (array) get_user_meta($user->ID, 'country_code');
// Generate language slug regex
$languages_slug = '(?:' . implode( '/|', $language_slugs ) . '/)?';
// Set up the list of rules that don't need to be prefixed
$whitelist = [
'^wp-json/?$',
'^wp-json/(.*)?',
'^index.php/wp-json/?$',
'^index.php/wp-json/(.*)?'
];
// Set up the new rule for home page
$new_rules['(?:' . implode( '/|', $language_slugs ) . ')/?$'] = 'index.php';
// Loop through old rules and modify them
foreach ( $rules as $key => $rule ) {
// Re-add those whitelisted rules without modification
if ( in_array( $key, $whitelist ) ) {
$new_rules[ $key ] = $rule;
// Update rules starting with ^ symbol
} elseif ( substr( $key, 0, 1 ) === '^' ) {
$new_rules[ $languages_slug . substr( $key, 1 ) ] = $rule;
// Update other rules
} else {
$new_rules[ $languages_slug . $key ] = $rule;
}
}
// Return out new rules
return $new_rules;
}
add_filter( 'rewrite_rules_array', 'prepend_default_rewrite_rules' );
.htaccess가 이를 달성하는 더 빠른 방법이 될 것이며 사용자가 전체 페이지 캐시를 구현하는 데도 문제가 없을 것입니다.
웹 사이트에서 cloudflare를 사용하는 경우 cloudflare 자체에서 국가를 가져오는 다음과 같은 간단한 코드를 사용할 수 있습니다 ;)
Options +FollowSymLinks
RewriteEngine on
#INDIA
RewriteCond %{HTTP:CF-IPCountry} ^IN$
RewriteRule !^in/ /in%{REQUEST_URI} [NC,NE,R,L]
#USA
RewriteCond %{HTTP:CF-IPCountry} ^US$
RewriteRule !^us/ /us%{REQUEST_URI} [NC,NE,R,L]
#THAILAND
RewriteCond %{HTTP:CF-IPCountry} ^TH$
RewriteRule !^th/ /th%{REQUEST_URI} [NC,NE,R,L]
이것은 대체할 것입니다.
사용자가 미국에서 온 경우 xyz.com/sg/random 로 xyz.com/us/random .
GeoIP를 사용하려는 경우
GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat
RewriteEngine on
#INDIA
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^IN$
RewriteRule !^in/ /in%{REQUEST_URI} [NC,NE,R,L]
#USA
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US$
RewriteRule !^us/ /us%{REQUEST_URI} [NC,NE,R,L]
#THAILAND
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^TH$
RewriteRule !^th/ /th%{REQUEST_URI} [NC,NE,R,L]
사용 사례에 따라 항상 더 많은 국가를 추가할 수 있습니다.누군가도 여전히 PHP 코드를 찾고 있습니다. 그냥 저에게 알려주세요.
Wordpress 기반 PHP의 경우
//For fetching url eg. xyz.com/in/ from xyz.com/in/random-link/abc
$current_url = home_url( add_query_arg( NULL, NULL ) );
//For fetching random-link/abc
$current_rel_url = str_replace( home_url(), "", $current_url );
// I am using cloudflare country variable here , you can use any of your api or whatever method needed
if( !empty($_SERVER["HTTP_CF_IPCOUNTRY"]) ) {
$userCountry = $_SERVER["HTTP_CF_IPCOUNTRY"];
exit( wp_safe_redirect( site_url() . $userCountry . $current_rel_url ) );
}
용도에 따라 리디렉션 조건을 수정할 수 있습니다.
언급URL : https://stackoverflow.com/questions/44701811/rewrite-sub-folder-dynamically-with-country-code-in-wordpress-using-php
'sourcetip' 카테고리의 다른 글
다른 스키마의 사용자에게 권한 부여 (0) | 2023.09.25 |
---|---|
긴 정수에 대한 최대값 (0) | 2023.09.25 |
div 크기 유지 종횡비 응답적으로 변경 (0) | 2023.09.25 |
속성별 필터링 (0) | 2023.09.25 |
기존 워드프레스 인스턴스에 그룬트 사용 (0) | 2023.09.25 |