>  기사  >  php教程  >  Apache URL 재작성

Apache URL 재작성

黄舟
黄舟원래의
2016-12-21 11:21:212552검색

첫 번째 방법: Apache 환경에서 URL 주소를 다시 작성하려면 정규식이 가장 기본적인 요구 사항이지만 일반 URL 주소의 경우 기본 일치를 사용하면 대부분의 요구 사항을 충족할 수 있으므로 아주 특별한 경우가 아니면 URL 주소이지만 이것은 제가 논의하고 싶은 범위가 아닙니다. 몇 가지 간단한 단계를 통해 Apache에서 URL 주소를 다시 작성하는 방법을 알아보세요.

002

003 URL 예

004

005 URL 다시 쓰기: http://www.baidu.com/?p=152

006

007 원본 URL: http://www.baidu.com/p152.html

008

009 규칙 다시 작성:

010

011 ^p ([0-9]+).html /?p=$1 [L]

012

013 정규식 기본 지식:

014

015 ^ 일치하는 줄의 시작은 URL 주소의 시작과 일치합니다. RewriteRule의 경우 도메인 이름(http://www.xxxx.com)은 위와 같이 URL 주소의 일부가 아닙니다.?p =152

016

017 () 위와 같이 캡처된 표현식을 구분합니다: ([0-9]+)

018

019 [] 위와 같이 문자 클래스를 정의합니다. [0 -9]는 0-9의 숫자를 나타냅니다.

020

021 +는 이전 문자가 한 번 또는 여러 번 반복되고 일치될 수 있음을 나타냅니다. 위와 같이: [0-9]+, 임의의 숫자 조합을 나타냄

022

023 위와 같이 문자 이스케이프:

024

025 기타:

026

027 [L]은 마지막을 의미하고 나머지는 일치하지 않음

028

029 방법은 다음과 같습니다.

030

031 1. httpd.conf 파일을 열고 #

032

033 #LoadModule rewrite_module module/mod_rewrite.so 주석을 찾습니다. >034

035 2. httpd-vhosts.conf 파일을 열고 VirtualHost에 다시 쓰기 규칙을 추가합니다.

036

037 RewriteEngine On

038

039 RewriteRule ^p([0-9]+ ).html /?p=$1 [L]

040

041 기본적으로 이는 위의 두 단계입니다. 일반적으로 Apache에서 URL 주소 다시 쓰기는 상대적으로 간단합니다. 문서를 읽는 것보다 배우는 것이 훨씬 빠르지만 더 깊이 이해하려면 관련 문서를 읽어야 합니다. 다른 규칙을 사용자 정의할 수 있습니다. 기억하세요: 모든 일치는 실제로 정규식 교체 프로세스입니다.

042

043 검색 엔진 친화적인 URL 주소를 만드는 것은 PHP 프로그래머에게 매우 중요하므로 단순히 Apache에서 URL 주소 다시 쓰기를 배우는 것은 가장 기본적인 요구 사항 중 하나가 될 것입니다.

044

045

046 두 번째 방법:

047

048 1. 먼저 다시 쓰기 모듈이 설치되어 있는지 확인합니다.

049

050 cat httpd.conf | grep rewrite

051 LoadModule rewrite_module 모듈/mod_rewrite.so

052

053 2 의사 정적 HTML 연결 생성:

054

055 (1) 의사 정적 HTML 생성

056

057 < 끝에 추가 ;VirtualHost> 섹션

058

059 RewriteEngine on

060 RewriteRule /goods([0-9]+).html /goods.php?id=$1 [PT ]

061 보다 표준적인 작성 방법은 다음과 같습니다.

062 RewriteRule ^(.*)/goods([0-9]+).html$ $1/goods.php?id= $2 [PT]

063 더 간결한 글쓰기:

064 /goods(d+).html /goods.php?id=$1

065

066 첫 번째( 0-9]+)는 매개변수 $1에 해당하고, 두 번째는 $2에 해당합니다.

067

068 예:

069

070 RewriteRule / forum-([0-9]+)-([0-9]+).html /forumdisplay.php?fid=$1&page=$2 [PT]

071

072 테스트 http://www.xxx.com/goods1.html이 /goods.php?id=1과 동일한 내용인가요?

073

074 마지막으로 교체하세요. 설정된 의사 링크가 있는 모든 링크 정적 HTML 주소 방법

075

076

077 [PT]: URL 전역 변환, 즉 변환된 Goods31.html은 Goods.php?id=31에 해당합니다(기본값은 매개변수 없음)

078 [R]: URL 리디렉션 Goods31.html 🎜>

083 RewriteCrond %{HTTP_HOST} !xxxx.com [R=301,L]

084 RewriteRule ^(.*을 사용하여 액세스하면 Goods.php?id=31로 이동합니다. )$ http://www.xxxx.com/warning.html [ R=301,L]

085

086 xxxx.com이 아닌 요청을 http://www로 리디렉션합니다. xxxx.com

087

088 더 나은 접근 방식:

089 RewriteCond %{HTTP_REFERER} !^http://(www.)?xxxx.com/.*$ [NC]

090 RewriteRule .(mp3|rar|jpe|gif)$ http://www.xxxx.com/warning.jpg [R=301,L]

091

092 4. 바이두 방지 크롤러 :

093 RewriteCond %{HTTP_USER_AGENT} ^Baiduspider [OR]

094 RewriteRule ^(.*)$ http://www. google.com [R=301,L]

095 Baidu에서 Google로 크롤러 전송

096

097 PS: PHP 의사 정적 방법

101

102 방법 1:

103

104 예를 들어, 이 웹페이지는

105

106 http:// www.xxxx.com/soft.php/1,100,8630.html

107

108 실제로 처리한 스크립트는 Soft.php 이고 매개변수는 1,100,8630

109

110 Soft.php?a=1&b=1=100&c=8630과 동일하지만 이 URL은 기억하기 너무 어렵습니다. 검색 엔진도 그것을 좋아하지 않습니다.

111

112 진정한 정적은 완전히 생성된 HTML입니다.

113

114 클라이언트 접속 시 직접 출력합니다. 스크립트 설명이 필요하지 않습니다. 트래픽이 매우 클 때(예: 매일 수백만 건의 방문이 있는 경우) 매우 좋은 결과를 얻을 수 있습니다. 즉, 이 HTML 페이지는 실제로 서버 측에 존재합니다.

115

116 물론 웹사이트의 트래픽이 그다지 크지 않을 때입니다. URL을 재작성하는 것이 가장 좋은 방법입니다. (개인적인 생각으로는 트래픽이 많을 때는 로드 밸런싱을 고려해 볼 수 있습니다. 둘 다 상관없습니다.)

117

118 재작성하는 방법은 여러 가지가 있습니다 URL.APACHE,IISREWRITE. 심지어 PHP 스크립트도 이를 직접 처리할 수 있습니다. 예를 들어 위의 예에서는 PHP 스크립트로 직접 처리합니다(이 방법의 장점은 트래픽이 많을 때 WEB 서버에 대한 부담을 직접적으로 줄여준다는 것입니다. PS: 이 역시 개인적인 의견입니다:

119

120 === ================================ ============

121

122 PHP 의사정적 프로그램 구현 방법에 대해 이야기하기 위해 프로그램을 예로 들어보겠습니다. 이 방법은 이미 다른 포럼 커뮤니티에 게시되었습니다.

123

124 프로그램을 예로 들어보겠습니다.

125

126 http://www .xxxx.com/soft.php/1,100,8630.html

127

128 코드:

129

130 //서버 변수 사용 PATH_INFO 정보를 얻으려면 이 예제에서는 실행 스크립트 이름 뒤에 있는 부분인 /1,100,8630.html입니다.

131

132 if(@$path_info =$ _SERVER ["PATH_INFO"]){

133 //정규 일치 매개변수

134 if(preg_match("// (d+),(d+),(d+).html/si", $path_info,$arr_path)){

135 $gid =intval($arr_path[1]); //값 1 가져오기

136 $sid =intval($arr_path[2]) ; //값 100 가져오기

137 $softid =intval($arr_path[3]) //값 8630 가져오기

138 }else die("Path:Error!") ;

139 //soft.php?gid=1&sid=100&softid=8630

140 //그렇게 간단해요 ~)

141 방법 2:

142 Apache의 구성 파일 httpd.conf를 엽니다.

143 두 개의 장군 #Loadmodule Rewrite_module Modules/MOD_REWRITE The#🎜>

144 세 개의 추가:

145 & lt;

146 RewriteEngine

147 #RewriteCond %{ENV:SCRIPT_URL} (?:index|dispbbs)[-0-9]+.html

148 RewriteRule ^(.*?(?:index|dispbbs))- ([-0-9]+).html 1.php?__is_apache_rewrite=1&__rewrite_arg=2

149

150 넷째, ASP 게시물 URL 매핑을 구현해야 합니다. php post에 세 번째 단계에서 을 추가합니다.

151 RewriteMap tolowercase int:tolower

152 RewriteCond %{QUERY_STRING} (? : boardid|page|id|replyid|star|skin)=d+ [NC]

153 RewriteRule ^(.*(?:index|dispbbs)).asp 1.php?{tolowercase:%{QUERY_STRING } }&__is_apache_rewrite=1

154 httpd.conf를 저장하고 Apache를 다시 시작하세요

155 방법 3:

156

157 함수 mod_rewrite( ){

158 글로벌

159 $ _GET

160 $nav=$ _SERVER["REQUEST_URI"]

161 $script_name=$ _SERVER ["SCRIPT_NAME"];

162 $nav=substr(ereg_replace("^$script_name","",urldecode($nav)),1)

163 $nav=preg_replace ("/^.ht(m){1}(l){0,1}$/","",$nav);//이 문장은 꼬리가 제거된 .html 또는 .htm입니다.

164 $vars = 폭발("/",$nav);

165 for($i=0;$i

166 $ _GET["$vars[$i]"]=$vars[$i+1];

167 }  

168 $ _GET;  

169 }

170 mod_rewrite()

171 $yearn=$ _GET["year"];//결과는 '2006'

172 $action=$ _GET[ "action "]; // 결과는 '_add'입니다.

174 echo $ action

;?php

177 함수 mod_rewrite(){

178 전역 $ _GET;

179 $nav= $ _SERVER["REQUEST_URI"]

180 $script_name= $ _SERVER["SCRIPT_NAME"];

181 $nav=substr(ereg_replace("^$script_name","",urldecode($nav)),1)

182 $nav =preg_replace("/^.ht(m){1}(l){0,1}$/","",$nav);//이 문장은 꼬리가 제거된 .html 또는 .htm입니다.

183 $vars = 폭발("/",$nav)

184 for($i=0;$i

185 $ _GET["$vars[$i]"]=$vars[$i+1];

186 }  

187 반환  

188 $ _get ;

189}

190 mod_rewrite ();

191 $ Yearn = $ _get ["연도"] // 결과는 '2006'입니다.

192 $action=$ _GET["action"];//결과는 '_add'입니다.

193 echo $yearn;

194 echo $action; >195 많은 경우 특정 IP에 대한 액세스로 인해 CPU가 쉽게 100%가 될 수 있습니다(예: 일부 검색 엔진의 고정 크롤링, 다른 일부의 수집 사이트). 이때 효과적인 방법을 사용해야 합니다. 는 상대방의 IP를 차단하여 서버의 리소스를 소비하지 못하도록 하는 것을 의미합니다. IP를 차단하는 방법에는 여러 가지가 있습니다. 웹 서버에 Rewrite 모듈이 설치되어 있으면 Rewrite 규칙을 사용하여 상대방의 IP를 차단할 수도 있습니다. .

196 1. 예를 들어 특정 IP를 Baidu 홈페이지로 직접 리디렉션하고 웹 사이트 루트 디렉터리의 .htaccess 파일에 코드를 추가합니다.

197 RewriteCond % 123.123.123.123 [ NC ]RewriteRule ^(.*)$ http://www.baidu.com/$1 [R=301] IP 123.123.123.123을 제한하려는 IP로 교체

198 2. 원하는 경우 여러 IP를 구현하려면 다음과 같이 작성할 수 있습니다.

199 RewriteCond % 123.123.123.123 [OR]RewriteCond % 124.124.124.124 [NC]RewriteRule ^(.*)$ http://www.baidu.com /$1 [R=301]

위 내용은 아파치의 URL주소 재작성 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.