2014-10-22 3 views
2

두 개의 RewriteRules를 만들려고하지만 mod_rewrite를 사용하여 멋지게 만들 수 없습니다..htaccess RewriteRule 조건부?

무엇을 달성하려고하면 다음과 같은 ...

domain.com/my/friendly/url = domain.com/index.php?a=$1

이 하나가 간단하다,하지만 난 다음에 (임의의 길이의) 숫자의 존재를 확인하려고 두 번째 요청 매개 변수로 추가하십시오.

$1my/friendly/url$2100이다 domain.com/my/friendly/url/100 = domain.com/index.php?a=$1&id=$2

예를 들어

.

나는 수많은 패턴을 성공시키지 않고 시험해 보았습니다. 내 .htaccess 파일이 이와 같이 보이며 실패합니다.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]*)(\/[0-9]+)$ index.php?a=$1&id=$2 [L,QSA] 
RewriteRule ^(.*)$ index.php?a=$1 [L,QSA] 

답변

1

이 같은 규칙을 가질 수 있습니다

# ignore all rules for real files or directories 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

RewriteRule ^(.+?)/([0-9]+)/?$ index.php?a=$1&id=$2 [L,QSA] 

RewriteRule ^(.+)$ index.php?a=$1 [L,QSA] 
+0

가 치료를 작동! 고마워요! –

+0

2 RewriteCond가 전체 코드를 손상시키는 것으로 나타났습니다.하지만이 RewriteRule이 올바른 이유는 ** ** ** 이유를 알고 싶습니다. – zessx

+0

1. 주요 문제는 OP의 첫 번째'RewriteRule'에서 사용 된 정규 표현식입니다. 2. RewriteCond는 모든 RewriteRule에만 적용되는 것이 아니라 다음 RewriteRule에만 적용됩니다. – anubhava