2010-07-31 3 views
2

나는 미쳐 가고있다. 내가하고 싶은 일은 내가 개발하는 사이트에 다음 규칙을 추가하는 것입니다.WordPress : 사용자 정의 재 작성 규칙 - .htaccess 또는 functions.php?

fastigheter-spanien/x property/X&lang=sv 
fastigheter-usa/x property/X&lang=sv 
properties-spain/X property/X&lang=en 
properties-usa/X property/X&lang=en 

여기서 X는 게시물의 이름입니다. 이들은 모두 사용자 정의 게시물 유형입니다. 내가이 상황을 끝내기 시작한 이유는 여러 언어를 사용하지만 클라이언트가 각 기사에 대해 하나 이상의 게시물을 만들지 않기를 바랬 기 때문입니다 (옵션과 이미지가 많아서 다시 게시해야 함). 문제). functions.php에서 rewrite_rules를 작성하고 .htaccess 파일을 수정했지만 작동시키지 못했습니다. 이러한 재 작성은 매우 간단하므로 어떤 함수도 사용할 필요가 없습니다. .htaccess 파일을 적용 할 수 없습니까?

단지 (404) 어떤 아이디어 나에게주는

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_URI} !^/fastigheter-spanien/([^\./]+) 
RewriteCond %{REQUEST_URI} !^/fastigheter-usa/([^\./]+) 
RewriteCond %{REQUEST_URI} !^/properties-spain/([^\./]+) 
RewriteCond %{REQUEST_URI} !^/properties-usa/([^\./]+) 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

RewriteRule ^fastigheter-spanien/([^\./]+)$ property/$1 [L] 
RewriteRule ^fastigheter-usa/([^\./]+)$ property/$1 [L] 
RewriteRule ^properties-spain/([^\./]+)$ property/$1&lang=sv [L] 
RewriteRule ^properties-usa/([^\./]+)$ property/$1&lang=sv [L] 

를 시도? 모든 다른 htaccess로 파일을 실패하면

+0

어쩌면이 질문은 superuser.com에서 물어 보는 것이 좋을까요? –

+0

그 이유는 모르겠습니까? –

답변

3

가 여기 내 플러그인 중 하나에서 코드 조각이다 "플러그인"에서 접선 할 수있는 대체 솔루션이 있습니다.

<?php 
function fancy_url_hook($var='REQUEST_URI') 
{ 
    if (!in_array($var, array('REQUEST_URI', 'PATH_INFO'))) $var = 'REQUEST_URI'; 
    $req = $_SERVER[$var]; 

    if (($var != 'PATH_INFO') && isset($_SERVER['PATH_INFO'])) { 
     fancy_url_hook('PATH_INFO'); 
    } 
    $explodeURL = array_slice(explode('/',$req),1,5); 

    global $language; 

    switch($explodeURL) { 
     case 'fastigheter-spanien': $url = 'sv'; break; 
     case 'fastigheter-usa': $url = 'sv'; break; 
     case 'properties-spain': $url = 'en'; break; 
     case 'properties-usa': $url = 'en'; break; 
    } 

    $language = $url; 

} 

function source_function() 
{ 
    global $language; 
    $_GET['lang'] = $language; 

} 

add_action('init', 'fancy_url_hook'); 
add_action('init', 'source_function'); 
?> 

그러나 약간의 편집이 필요하며 "플러그인"에서 직접 연결해야합니다. 따라서 플러그인이 필요할 수 있습니다.

.htaccess 파일을 편집 한 후에 모든 플러그인을 비활성화 해 보셨습니까?

+0

죄송합니다.이 문제는 포기합니다. WordPress의 자체 재 작성, WPML의 재 작성 및 재 작성 사이의 혼란을 해결하는 것은 너무 큰 퍼즐입니다. 당신의 도움을 주셔서 감사합니다. –

+0

불행한 일. 언젠가 그것은 단지 출현으로 올 것입니다 – Anraiki

6

다시 쓰기가 올바르게 작동해야하지만 WordPress에 수정 내용이 표시되지 않습니다. 그 이유는 WordPress가 $_SERVER['REQUEST_URI']에서 읽음으로써, mod_rewrite 작업의 결과가 아닌 원래 URI 인 요청 URI가 항상 포함되어 있기 때문입니다.

실제로 WordPress를 사용하는 것에 익숙하지 않지만 일부 다른 질문에 대해서는 소스 코드를 살펴본 결과 $_SERVER['PATH_INFO'] (제공된 경우)도 사용하려고합니다. 따라서, 당신이 시도 할 수 있습니다 :

AcceptPathInfo On 
RewriteEngine On 
RewriteBase/

RewriteRule ^fastigheter-(spanien|usa)/([^\./]+)$ property/$2&lang=sv 
RewriteRule ^properties-(spain|usa)/([^\./]+)$ property/$2&lang=en 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* /index.php/$0 [L] 

(나는 아직 이유를 결정했다고 생각하지 않지만, 일반적으로 당 디렉토리 환경에서 작동하지 않습니다) 나는 PATH_INFO를 사용하는 것처럼 문제가있는 것을 발견 , 일반적으로 반대하는 것이 좋습니다.

다른 옵션은 PHP 측에서도 약간의 작업을 포함합니다. Anraiki suggested과 비슷한 것을 할 수도 있고, 아니면 그냥 $_SERVER['REQUEST_URI']이라고 말하면 될 것입니다.

mod_rewrite이 리다이렉션을 수행하면 모듈의 REQUEST_URI은 서버의 REDIRECT_URL 변수에 저장됩니다.그래서 다시 쓰기 규칙 세트를 조금 조정, 우리는이 작업을 수행 할 수 있습니다

RewriteEngine On 
RewriteBase/

# Force L on these rules to cause the REQUEST_URI to be changed (so that 
# REDIRECT_URL will end up with the rewritten value we want) 
RewriteRule ^fastigheter-(spanien|usa)/([^\./]+)$ property/$2&lang=sv [L] 
RewriteRule ^properties-(spain|usa)/([^\./]+)$ property/$2&lang=en [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

을 그런 곳 초기에 같은 index.php에서와 워드 프레스 가공 (, 당신은 가능성이 후속 워드 프레스와 해당 파일을 업데이트 할 필요가 없습니다 때문에 출시), 당신이 할 수있는 다음 :

if (!empty($_SERVER['REDIRECT_URL'])) 
    $_SERVER['REQUEST_URI'] = $_SERVER['REDIRECT_URL']; 

아주 잘가이 요청을 구문 분석하는 규칙 목록을 반복 않기 때문에, 영구 링크 설정 자체를 사용하여 워드 프레스에 당신의 행동을 정의하는 방법이 될,하지만 난 할 수있다 내가 직접 사용한 적이 없으므로 이것에 대한 자세한 내용은 분명하지 않다. 이것이 가능하다면이 상황을 처리하는 데 권장되는 방법이라고 생각하지만,이 옵션 중 하나가 제대로 작동하도록해야합니다.

+0

죄송합니다,이 문제를 포기. WordPress의 자체 재 작성, WPML의 재 작성 및 재 작성 사이의 혼란을 해결하는 것은 너무 큰 퍼즐입니다. 당신의 도움을 주셔서 감사합니다. –