URI 중 /kngil/skin 반복제거. php 확장자 노출 제거

This commit is contained in:
Lectom C Han
2026-02-05 12:09:12 +09:00
parent 8fa50e6d0d
commit 8501529eb6
16 changed files with 50 additions and 37 deletions

View File

@@ -1,6 +1,15 @@
RewriteEngine On
# Skip existing files and directories.
# 레거시 /kngil/skin/*.php -> /* (확장자 제거)
RewriteRule ^kngil/skin/([^/]+)\.php$ /$1 [R=301,L]
# 레거시 /kngil/*.php -> /* (확장자 제거)
RewriteRule ^kngil/([^/]+)\.php$ /$1 [R=301,L]
# 레거시 /kngil 또는 /kngil/ -> /
RewriteRule ^kngil/?$ / [R=301,L]
# 기존 파일/디렉터리는 그대로 통과
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
@@ -21,3 +30,7 @@ RewriteRule ^admin/api/product/delete/?$ /kngil/bbs/adm_product_popup_delete.php
RewriteRule ^admin/api/faq/?$ /kngil/bbs/adm_faq_popup.php [QSA,L]
RewriteRule ^admin/api/faq/save/?$ /kngil/bbs/adm_faq_popup_save.php [QSA,L]
RewriteRule ^admin/api/faq/delete/?$ /kngil/bbs/adm_faq_popup_delete.php [QSA,L]
# 루트 페이지 라우팅: / -> index, /{page} -> /kngil/skin/{page}.php
RewriteRule ^$ /kngil/skin/index.php [L]
RewriteRule ^([^/]+)$ /kngil/skin/$1.php [L]

View File

@@ -278,7 +278,7 @@ try {
<body>
<script>
(function () {
const target = '/kngil/skin/index.php';
const target = '/';
if (window.opener && !window.opener.closed) {
try {
window.opener.postMessage({ type: 'OIDC_LOGIN_SUCCESS' }, window.location.origin);
@@ -295,7 +295,7 @@ try {
})();
</script>
<noscript>
<a href="/kngil/skin/index.php">메인으로 이동</a>
<a href="/">메인으로 이동</a>
</noscript>
</body>
</html>
@@ -305,5 +305,5 @@ try {
} catch (Exception $e) {
echo "<h1>로그인 오류</h1>";
echo "<p>" . htmlspecialchars($e->getMessage()) . "</p>";
echo "<a href='/kngil/index.php'>메인으로 돌아가기</a>";
echo "<a href='/'>메인으로 돌아가기</a>";
}

View File

@@ -2,5 +2,5 @@
session_start();
session_destroy();
header('Location: /kngil/skin/index.php');
header('Location: /');
exit;

View File

@@ -14,7 +14,7 @@ if (session_status() === PHP_SESSION_NONE) {
if (empty($_SESSION['login'])) {
echo "<script>
alert('로그인 후 이용 가능합니다.');
location.href = '/kngil/skin/qa_list.skin.php';
location.href = '/qa_list.skin';
</script>";
exit;
}
@@ -92,7 +92,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'delet
$pdo->commit();
header("Location: /kngil/skin/qa_list.skin.php");
header("Location: /qa_list.skin");
exit;
} catch (Exception $e) {

View File

@@ -1,7 +1,7 @@
<?php
/**
* Q&A 리스트 컨트롤러
* - 스킨: /kngil/skin/qa_list.skin.php
* - 스킨: /kngil/skin/qa_list.skin.php (URL: /qa_list.skin)
*/
ini_set('display_errors', 1);

View File

@@ -17,7 +17,7 @@ if (session_status() === PHP_SESSION_NONE) {
if (empty($_SESSION['login'])) {
echo "<script>
alert('로그인이 필요합니다.');
location.href = '/kngil/skin/qa_list.skin.php';
location.href = '/qa_list.skin';
</script>";
exit;
}

View File

@@ -13,11 +13,11 @@
VISITED_STORAGE_KEY: 'visited',
VIDEO_BASE_PATH: '../img/video',
PAGE_LINKS: {
1: '/kngil/skin/value.php',
2: '/kngil/skin/provided.php',
3: '/kngil/skin/primary.php',
4: '/kngil/skin/analysis.php',
5: '/kngil/skin/results.php'
1: '/value',
2: '/provided',
3: '/primary',
4: '/analysis',
5: '/results'
},
SELECTORS: {
video: '#video_play',

View File

@@ -18,19 +18,19 @@
<div class="comp-contact">
<ul class="footer-menu">
<li>
<a href="value.php">KNGIL</a>
<a href="/value">KNGIL</a>
</li>
<li>
<a href="provided.php">제공데이터</a>
<a href="/provided">제공데이터</a>
</li>
<li>
<a href="primary.php">주요기능</a>
<a href="/primary">주요기능</a>
</li>
<li>
<a href="analysis.php">데이터분석</a>
<a href="/analysis">데이터분석</a>
</li>
<li>
<a href="results.php">성과품</a>
<a href="/results">성과품</a>
</li>
</ul>
<div class="footer-family">
@@ -54,4 +54,4 @@
<!-- // 모든 팝업페이지 경로 -->
<script src="/kngil/js/common.js"></script>
<script src="/kngil/js/common.js"></script>

View File

@@ -229,14 +229,14 @@ $isCompanyAdmin = in_array($auth, ['BS100100', 'BS100200', 'BS100300', 'BS100400
<div class="floating-menu">
<ul>
<li class="floating-faq">
<a href="/kngil/skin/qa_list.skin.php">
<a href="/qa_list.skin">
<i class="ico-faq"></i>
<span>Q&A</span>
</a>
</li>
<li class="floating-buy">
<a href="/kngil/skin/buy.php">
<a href="/buy">
<i class="ico-buy"></i>
<span>구매하기</span>
</a>

View File

@@ -1,6 +1,6 @@
<ul class="sitemap">
<li class="value">
<a href="/kngil/skin/value.php">
<a href="/value">
<span>KNGIL</span>
<p>
공공데이터 기반으로<br>
@@ -12,7 +12,7 @@
<div class="bg-line down"></div>
</li>
<li class="provided">
<a href="/kngil/skin/provided.php">
<a href="/provided">
<span>제공데이터</span>
<p>
항목별 공공데이터를 기반으로<br>
@@ -26,7 +26,7 @@
<div class="bg-line up"></div>
</li>
<li class="primary">
<a href="/kngil/skin/primary.php">
<a href="/primary">
<span>주요기능</span>
<p>
기초현황 보고서 설정 등에 대한 <br>
@@ -40,7 +40,7 @@
<div class="bg-line down"></div>
</li>
<li class="analysis">
<a href="/kngil/skin/analysis.php">
<a href="/analysis">
<span>데이터분석</span>
<p>
데이터의 특성과 형태에 따라 <br>
@@ -54,7 +54,7 @@
<div class="bg-line up"></div>
</li>
<li class="results">
<a href="/kngil/skin/results.php">
<a href="/results">
<span>성과품</span>
<p>
데이터 분석 결과를 기반으로<br>

View File

@@ -82,7 +82,7 @@
</ul>
</div>
<div class="btn-wrap">
<a href="/kngil/skin/faq_list.skin.php" class="btn-contact">
<a href="/faq_list.skin" class="btn-contact">
<i class="ico-contact"></i>
KNGIL 구매문의
</a>

View File

@@ -63,7 +63,7 @@
<ul class="sub-tab">
<li class="on">
<a href="/kngil/skin/faq_list.skin.php">자주하는 질문(FAQ)</a>
<a href="/faq_list.skin">자주하는 질문(FAQ)</a>
</li>
<li>
<a href="/kngil/bbs/qa_list.php">문의하기(Q&A)</a>

View File

@@ -29,7 +29,7 @@
if (!$isLogin) {
echo "<script>
alert('로그인 후 문의 등록이 가능합니다.');
location.href = '/kngil/skin/qa_list.skin.php';
location.href = '/qa_list.skin';
</script>";
exit;
}
@@ -56,7 +56,7 @@
<p class="sub-txt">KNGIL 관련 문의하기</p>
</div>
<ul class="sub-tab">
<li><a href="/kngil/skin/faq_list.skin.php">자주하는 질문(FAQ)</a></li>
<li><a href="/faq_list.skin">자주하는 질문(FAQ)</a></li>
<li class="on"><a href="/kngil/bbs/qa_list.php">문의하기(Q&A)</a></li>
<li><a href="https://939.co.kr/saman/" target="_blank">원격지원</a></li>
</ul>

View File

@@ -56,7 +56,7 @@
<p class="sub-txt">KNGIL 관련 문의하기</p>
</div>
<ul class="sub-tab">
<li><a href="/kngil/skin/faq_list.skin.php">자주하는 질문(FAQ)</a></li>
<li><a href="/faq_list.skin">자주하는 질문(FAQ)</a></li>
<li class="on"><a href="/kngil/bbs/qa_list.php">문의하기(Q&A)</a></li>
<li><a href="https://939.co.kr/saman/" target="_blank">원격지원</a></li>
</ul>
@@ -233,7 +233,7 @@
</div>
<?php endif ?>
<div class="btn-wrap right">
<button type="button" class="btn-primary" onclick="location.href='/kngil/skin/qa_write.skin.php'">
<button type="button" class="btn-primary" onclick="location.href='/qa_write.skin'">
<i class="fa fa-pencil" aria-hidden="true"></i> 문의등록
</button>
</div>

View File

@@ -58,7 +58,7 @@
<span>EG-BIM 관련 문의하기</span>
</div>
<ul class="sub_tab">
<li><a href="/kngil/skin/faq_list.skin.php">자주하는 질문(FAQ)</a></li>
<li><a href="/faq_list.skin">자주하는 질문(FAQ)</a></li>
<li class="on"><a href="/kngil/bbs/qa_list.php">문의하기(Q&A)</a></li>
<li><a href="https://939.co.kr/saman/" target="_blank">원격지원</a></li>
</ul>
@@ -235,7 +235,7 @@
<?php endif ?>
<div class="btn-group">
<button type="button" class="btn btn-write" onclick="location.href='/kngil/skin/qa_write.skin.php'">
<button type="button" class="btn btn-write" onclick="location.href='/qa_write.skin'">
<i class="fa fa-pencil" aria-hidden="true"></i> 문의등록
</button>
</div>

View File

@@ -46,7 +46,7 @@
if (!$isLogin) {
echo "<script>
alert('로그인 후 문의 등록이 가능합니다.');
location.href = '/kngil/skin/qa_list.skin.php';
location.href = '/qa_list.skin';
</script>";
exit;
}
@@ -70,7 +70,7 @@
<p class="sub-txt">KNGIL 관련 문의하기</p>
</div>
<ul class="sub-tab">
<li><a href="/kngil/skin/faq_list.skin.php">자주하는 질문(FAQ)</a></li>
<li><a href="/faq_list.skin">자주하는 질문(FAQ)</a></li>
<li class="on"><a href="/kngil/bbs/qa_list.php">문의하기(Q&A)</a></li>
<li><a href="https://939.co.kr/saman/" target="_blank">원격지원</a></li>
</ul>