it-swarm-ko.tech

사용자 정의 퍼머 링크 및 .htaccess 파일없이 WordPress를 설정 하시겠습니까?

Apache 구성을 직접 설정하기 때문에 .htaccess 파일을 사용하지 않는 것을 강력하게 선호하는 클라이언트가 있습니다. 그러나 그들은 여전히 ​​SEO 친화적 인 URL을 원합니다.

.htaccess 파일이없는 맞춤 퍼 뮤 링크가있는 방법이 있습니까? 지금까지의 나의 연구는 이것이 가능하지 않다는 것을 나타내는 것으로 보이지만, 아마도 훌륭한 개발자 중 한 명은 불가능한 일이 어떻게 가능할 수 있는지를 압니다. 미리 감사드립니다.

7
Mike Lee

안녕하세요 @Mike Lee :

질문에 대답하려면 모든 것이 어떻게 작동하는지 이해하는 것이 도움이됩니다.

Apache는 파일 및 디렉토리와 일치하는 URL을 제공합니다

Apache는 URL과 명시 적으로 일치하는 파일을 제공하거나 디렉토리가 명시 적으로 일치 할 때 디렉토리에있는 index.php을 제공하도록 설계되었습니다.

그러나 Apache는 mod_rewrite을 사용하여 정규식과 일치하는 URL을 제공 할 수 있습니다.

실제 디렉토리가없는 곳 (WordPress 및 꽤 영구 링크가있는 경우)에 대해 Apache가 URL을 일치 시키려면 URL을 다르게 처리하는 방법을 Apache에 알리는 방법이 있어야합니다. 이것이 바로 mod_rewrite이 허용하도록 설계된 것입니다. 서버 관리자는 정규식을 사용하여 URL 일치 규칙을 설정할 수 있습니다. 이러한 규칙은 결과를 종종 실제 .PHP 파일을 포함하고 때로는 URL 매개 변수가 전달 된 다른 URL로 라우팅합니다. 궁극적으로 규칙은 실제 파일이로드되도록 지정합니다.

mod_rewrite.htaccess 또는 httpd.conf로 구성됩니다.

mod_rewrite을 구성하려면 .htaccess 또는 httpd.conf 파일 또는 잠재적으로 httpd-vhosts.conf과 같이 포함 된 파일 중 하나에서만 수행 할 수 있습니다. 실제로 고객이 아는 것을 아파치에서 제어 할 수있는 기술을 보유하고 있다는 사실에 놀랐습니다.

워드 프레스는 항상 같은 간단한 .htaccess 파일을 사용합니다

퍼머 링크를 설정할 때 WordPress의 기능으로 넘어 가서 WordPress는 쓰기 가능한 것으로 가정하고 다음을 .htaccess 파일에 씁니다 ( 및이 첫 번째 예에서는 웹 사이트 사이트는 root )에서 제공됩니다.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

주의 사항 : WordPress 첫 페이지 디렉토리가 루트가 아닌 경우

사이트가 /blog에서 제공되는 경우 작성된 ​​.htaccess 파일은 다음과 같습니다.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

WordPress는 모든 파일/디렉토리 일치 URL을 index.php로 라우팅합니다.

보시다시피, WordPress가 .htaccess을 사용하는 유일한 것은 any URL을 도메인의 /index.php또는 /blog/index.php)에 매핑하는 것입니다. 두 번째 예) except URL이 실제 파일과 일치하는 경우 (예 : .jpg.gif/.png 이미지, .css 스타일 시트, .js 스크립트 등) 또는 실제 디렉토리와 일치하는 경우 (내가 아는 한 표준 WordPress 설치와 관련이 없음)

PHP WordPress에서 $_SERVER['REQUEST_URI']을 구문 분석하여 무엇을로드할지 결정합니다.

PHP 코드 WordPress 내부에서 전체 URL 요청이 포함 된 $_SERVER['REQUEST_URI']의 값을 가져옵니다 sans 도메인 및 체계 (예 : 체계는 http 또는 https) 그런 다음 값을 구문 분석하여 요청 된 URL과로드 할 페이지를 결정합니다.

.htaccess을 우회합니까? 아파치가 가상 URL을로드하게한다 (그러나 행운을 빕니다!)

따라서 .htaccess을 우회하려면 Apache가 임의의 URL에 응답하게하고 WordPress를로드하고 $_SERVER['REQUEST_URI']을 URL 경로와 매개 변수로 설정하십시오. IOW 스푸핑하지만 좋은 방법으로. 즉, 그렇게 복잡하지 않은 방법을 모른다면 알고 있습니다.

/index.php/ 임베드 (아마?!?)

URL에 /index.php/을 추가하는 것에 대해 * Chris_O *가 정확하더라도, 나는 그것을 볼 때마다 울었습니다. 모든 URL에 10자를 추가하여 검색 엔진에 더 길고 덜 의미가 있지만 훨씬 나쁘게 공유 할 수 있고 사용자에게 암호로 보입니다. 미안 크리스, 난 당신이 잘 의미 알고 있지만, ugh!

모든 URL에 대한 실제 디렉토리 만들기 (아마도?)

Apache를 건드리지 않고 꽤 퍼머 링크를 얻는 한 가지 방법은 원하는 모든 URL에 대한 실제 디렉토리를 생성하는 스크립트를 작성하고 WordPress를로드하는 index.php을 저장하는 것입니다. 물론 그것은 작은 이익을 위해 엄청난 노력이 될 것이며 서버가 .htaccess 파일을 사용하는 것보다 더 나쁜 쓰기 액세스 권한을 가져야합니다.

인정하기는 싫지만 이것이 IIS이 URL 재 작성을 지원하지 않았을 때 (그리고 오늘날에도 여전히 실제 PITA입니다!) 1998 년에 .ASP 기반 웹 사이트에서 수행 한 작업입니다. 유지하고 그것을 싫어했지만 URL은 사용자와 SEO 모두에게 좋았습니다!

최고의 솔루션? httpd.conf에 다시 쓰기 규칙 추가

아마도 가장 좋은 해결책으로 돌아가서 @ Simon Brown 실제로 권장했습니다. 다시 쓰기 규칙을 httpd.conf 또는 httpd-vhosts.conf과 같은 포함 파일 (내 Mac의 로컬 호스트에서 Apache가 구성되는 방식) 중 하나에 추가하십시오. 다음 지시문을 추가하여 사이트의 디렉토리와 일치하도록 디렉토리를 변경하십시오.

<Directory "/home/example_user/public_html/">
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</Directory>

보너스! 잠금 기능이 너무 성능이 뛰어남

이 마지막 옵션은 .htaccess을 제거하고 제어권을 다시 부여해야합니다. Apache가 시작될 때 httpd.conf이 한 번만로드되지만 _/.htaccess 파일이 모든 URL 요청에서로드되고 파싱되므로) 성능이 약간 더 좋습니다!

추신 고려해야 할 한 가지 더 프론트 엔드 Apache _ (Nginx와 같은 캐싱 서버로 트래픽이 많은 WordPress 사이트 필자는 대부분의 사람들이 Nginx를 사용하여 Apache에 대한 URL 재 작성을 수행하지 않았다고 생각하기 때문에 그린 필드 조정이 필요할 수 있지만 그 방향에 관심이 있다면 여기에 몇 가지 링크가 있습니다.

15
MikeSchinkel

mod_rewrite가없는 퍼머 링크

.htaccess 파일이 없거나 httpd.conf 파일을 수정하는 것은 pathinfo permalinks입니다. pathinfo permalinks는 index.php로 시작하는 것을 제외하고는 예쁜 퍼머 링크와 같습니다.

Pathinfo permalinks를 사용하려면 사용자 정의 퍼머 링크 구조의 시작 부분에 index.php /를 입력하십시오.

/index.php/%postname%/

자세한 내용은 Codex 기사 를 참조하십시오.

2
Chris_O

위로 나쁜 옛날에, WordPress는 퍼머 링크 구조를 변경할 때마다 새로운 설정 파일을 작성해야했습니다. 최신 설정에서 RewriteRules는 변경되지 않습니다.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

존재하지 않는 파일 (즉, 파일 시스템의 파일과 일치하지 않는 커스텀 퍼머 링크 경로)에 대한 모든 요청은 index.php를 통해 전달되고 $_SERVER['REQUEST_URI']는 실제로 요청 된 것을 PHP에게 알려줍니다. 클라이언트는 httpd.conf 또는 .htaccess에 다시 쓰기 규칙을 설정할 수 있으므로 permalink 구조를 조정할 때 수정하지 않아도됩니다.

일부 플러그인은 .htaccess 파일 자체를 수정하려고 시도하거나 파일을 수정하도록 요청합니다. 이 솔루션은 모든 사람에게 적합한 것은 아니지만 고려해 볼 가치가 있습니다.

0
Annika Backstrom