2013-03-01 2 views
3

은 내 웹 사이트.htaccess에 대한 여러 조건과 규칙을 작성하려면 어떻게합니까?

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{SCRIPT_FILENAME} !-f 
    RewriteCond %{SCRIPT_FILENAME} !-d 
    RewriteRule ^(.*)$ profile.php?membername=$1 [L] 
    RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC] 
</IfModule> 


# Works 
RewriteRule ^(.*)$ profile.php?membername=$1 [L] 
# Does not work 
RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC] 

다음 결과가 반전이 울부 짖는 소리로 변경이 모든 경우에 대해의 .htaccess 파일에 다음 있습니다.

# No longer works: 
RewriteRule ^(.*)$ profile.php?membername=$1 [L] 
# Now works: 
RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC] 


<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{SCRIPT_FILENAME} -f 
    RewriteCond %{SCRIPT_FILENAME} -d 
    RewriteRule ^(.*)$ profile.php?membername=$1 [L] 
    RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC] 
</IfModule> 

무슨 일 이니? 나는 모른다.

답변

2

여기서해야 할 일은 부정적인 테스트를 REQUEST_FILENAME에 유지하고 규칙의 순서를 반대로 바꾸는 것입니다. 그렇지 않으면 더 일반적인 ^(.*)이 항상 첫 번째와 일치하고 ^poem/보다 우선합니다.

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    # Negative conditions here... 
    # Using REQUEST_FILENAME instead of SCRIPT_FILENAME 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 

    # Match the more specific rule first... 
    RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC] 

    # Match the generic rule last. 
    RewriteRule ^(.*)$ profile.php?membername=$1 [L] 
</IfModule> 
+0

감사! 방금 전에 RewriteRule^poem /(.*)/?$ poem.php? id = $ 1 [L, NC]를 두 조건 모두 만족시키기 전에 찾았습니다. – Joshua

관련 문제