2012-11-02 4 views
1

저는 .htaccess와 mod_rewrite가 새로 도입되었습니다. 특정 URL로 친숙한 URL을 준비 할 수 있습니다. 그러나 나는 모든 것을 나를 위해 통일시킬 하나를 만들고 싶습니다.PHP .htaccess apache mod_rewrite를 하나의 변수로 통합했습니다.

예 :

Original : http://www.domain.com/index.php?module=profile&id=1. 
SEO : http://www.domain.com/profile/1 
.htaccess Code: RewriteRule ^profile/(.*) ?module=profile&id=$1 [L] 

당신은 내가 profile.htaccess 파일의 다른 모듈 이름을 지정해야 볼 수 있듯이 나는이하고 싶으면 무엇

;

Original : http://www.domain.com/?request=module/profile/id/1/other/any 
SEO : http://www.domain.com/module/profile/id/1/other/any 

그러나 mod_rewrite의 동일한 논리는 적용되지 않습니다.

RewriteRule ^(.*) ?request=$1 [L] 

이 문제가 해결 되었습니까?

내 전체 .htaccess;

# Disable server signature 
ServerSignature Off 
#################################################################### 
# MOD REWRITE 
#################################################################### 
<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteBase/

RewriteRule (.*) /index.php?request=$1 [L] 

</IfModule> 

이 방법으로 문제없이 사용할 수 있습니다. 작업 버전

# Disable server signature 
ServerSignature Off 
#################################################################### 
# MOD REWRITE 
#################################################################### 
<IfModule mod_rewrite.c> 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteBase/

RewriteRule (.*) index.php?request=$1 [L] 
</IfModule> 

# Disable server signature 
ServerSignature Off 
#################################################################### 
# MOD REWRITE 
#################################################################### 
<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteBase/

RewriteRule ^/ index.php [L] 

RewriteRule ^content/(.*) ?module=content&request=$1 
</IfModule> 

그러나 나는 아직도이어야 한 가지를 지정해야합니다.

도움 주셔서 감사합니다.

편집 다야 2

RewriteRule (.*) index.php?request=$1 [L] 

:

답변

3

나는 당신의 접근 방식에 문제가 표시되지 않습니다, 당신은 단지 작은 수정이 필요합니다. Btw. 모든 항목을 index.php으로 리디렉션하고 $_SERVER['REQUEST_URI'] 수퍼 글로벌 내의 요청 매개 변수를 찾아보십시오.

편집

문제는 여기에있다 :

<IfModule mod_deflate.c>  <<<<< 
SetOutputFilter DEFLATE 
# Don't compress 
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary 
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary 
#Dealing with proxy servers 
<IfModule mod_headers.c>  <<<<< 
Header append Vary User-Agent 
</IfModule> 
</IfModule>      <<<<< 

편집 ** aefxx ** 빠른 응답을위한 3 개

... 
RewriteEngine on 

# Pass any request not referring directly to a file or directory in the 
# filesystem to index.php  
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) index.php?request=$1 [L] 
+0

감사합니다. 그러나이 500 내부 서버 오류가 발생합니다. 전체 .htaccess 파일을 추가했습니다. 어쩌면 나는이 규칙 앞에 잘못 sth 않습니다. 나를 올바른 방향으로 인도 할 수 있다면 기쁠 것입니다. 내가 superglobals에 들어 가지 않는 것을 선호하지만 정보에 감사드립니다. – Revenant

+0

마지막으로''이 잘못 배치 된 경우'# GZIP' 주석 바로 앞에 붙여 넣으십시오. – aefxx

+0

내가 알아 차 렸던 것 : 규칙'RewriteRule/index.php [L]'은 ** mod_dir **에 의해 처리되므로 불필요합니다. 관련 지시어는'DirectoryIndex index.php [...]'를 읽어야하는데, 여기서 "..."는 대체물로 좋아할 수 있습니다. – aefxx

관련 문제