2017-04-13 4 views
1

회사 직원이 카테고리를 통해 나열되도록 허용하는 콘텐츠 관리 시스템을 구축 중입니다. 본질적으로 이것은 내가 성취하려는 것입니다 :.htaccess 페이지가 맞춤법 오류로 다시 쓰기

404, 500 등의 오류가있는 inside.php 페이지가 있습니다. 변수를 전달하고 변수를 기반으로 특정 정보를 표시하는 physicians.php이라는 페이지가 있으므로 physicians.php?id=1은 특정 카테고리의 직원을 표시합니다. 현재 http://website.com/physicians 또는 http://website.com/physicians/으로 이동하면 http://website.com/physicians.php으로 리디렉션되지만 의사가 단어를 변형 한 경우에도 문제가 발생합니다. 예를 들어 physiciansasfhouiae은 아직 기술적으로 존재하지 않는 페이지이기 때문에 physicians.php에 연결하여 inside.php에 연결할 수 있습니다. 때문에 년대 RewriteRule에이 2 줄 필요하지 않습니다

RewriteCond %{REQUEST_URI} physicians 
RewriteRule .* physicians.php 

뿐만 아니라 :

RewriteEngine on 

#enables you to access PHP files with HTML extension 
AddType application/x-httpd-php5 .html .htm 

RewriteCond ${REQUEST_URI} ^.+$ 
RewriteRule ^detail/(css|js|img)/(.*)?$ /$1/$2 [L,QSA,R=301] [OR] 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -l 
RewriteRule^- [L] 

RewriteCond %{REQUEST_URI} physicians 
RewriteRule .* physicians.php 

RewriteRule ^physicians/((([a-zA-Z0-9_-]+)/?)*)$ physicians.php?id=$1 [NC,L] 

RewriteRule ^((([a-zA-Z0-9_-]+)/?)*)$ inside.php?page=$1 

답변

1

당신은이 두 줄을 삭제하여 시작합니다 : 여기

내가 지금 가지고있는 재 작성 코드 이미 그 아래에 있지만, 당신이 주목하고있는 주요 문제를 일으키고 있습니다. 이 두 줄은 URL이 URL과 부분 문자열 "의사"가 일치하므로 원하는 내용이 아닙니다. 따라서 일치 패턴을보다 구체적으로 만들어야합니다.

RewriteRule ^physicians/((([a-zA-Z0-9_-]+)/?)*)$ physicians.php?id=$1 [NC,L] 

그 라인이 정말 당신이 당신이 원하는 것을 달성하기 위해 필요한 모든 : 다행히도, 다음 RewriteRule 라인은 이미하고있다. 아파치가 URL의 첫 단어이고 "physiciansasfhouiae"와 같은 맞춤법 오류와 일치하지 않는 슬래시 (예 : 전체 단어, "의사")로 끝나는 경우에만 "의사"라는 단어와 일치하도록합니다.

그러나 제안으로, 나는 선택 후행 슬래시가 여전히 일치 확인하고 ID 매개 변수에서 슬래시를 제거하기 위해 약간 조정할 것 :

RewriteRule ^physicians(/((([a-zA-Z0-9_-]+)/?)*))?$ physicians.php?id=$4 [NC,L] 

그래서이 physicians.php 이러한 모든 변화를 보내드립니다 :

/physicians 
/physicians/ 
/physicians/abc123 
/physicians/abc123/ 

ID 매개 변수는 abc123 (제공된 경우)과 동일합니다. URL에 변형 된 "의사"가 있더라도 다른 모든 요청은 inside.php로 이동합니다.

+0

잘 모르겠습니다. 왜 제대로 작동하는지 이해하지만 작동합니다. 고맙습니다. – Cody