단순히 /server/?Server=ServerName
重写为 /server/ServerName
,以便 ServerName
매개변수의 URL을 PHP로 전달하려고 합니다.
현재 내 .htaccess
파일에 다음이 있습니다:
보려고 /server/ServerName
或 /server/?Server=ServerName
하려고 할 때 404 오류가 발생했습니다.
이것은 내 재작성 로그입니다:
으아아아이 시점에서는 답답하고 간단한 것이 빠진 것 같아서 약간의 안내가 필요합니다.
조정해 보았습니다:
저는 코드가 실제로 재작성되는지 알아보기 위해 코드를 재작성하는 방법도 조사해 왔습니다.
아래 코드를 사용하여 디렉토리를 성공적으로 옮겼으며 /test2/
重写为 /server/?Server=ServerName
페이지가 잘 로드되었으므로 모듈이 활성화되어 실행 중임을 알 수 있습니다.
이 변경을 시도했지만 성공하지 못했습니다. URL은 다시 작성되지 않지만 페이지는 로드됩니다. Apache 2.4 .htaccess 친화적인 URL 재작성
RewriteEngine on RewriteBase / RewriteCond %{QUERY_STRING} Server=([^&]+) RewriteRule "^server/$" "/server/%1/?"
잘못된 방향으로 가고 있는 것 같습니다. 연결해야 하는 HTML 소스의
/server/ServerName
,因此在内部将请求从/server/ServerName
重写为 /em>/server/index.php?Server=ServerName
(请注意添加index.php
,如注释中所述)。/server/index.php?Server=ServerName
는 실제로 요청을 처리하는 기본(숨겨진) 파일 경로입니다.마지막 줄에서도 언급하신 것 같은데...
URL을 다시 작성해야 합니다. 그렇지 않으면 페이지가 로드되지 않습니다. "다시 작성"이 정확히 무엇인지에 대해 약간의 혼란이 있을 수 있습니다. URL은 변경되지 않습니다. URL을
.htaccess
변경 하기 위해 를 사용하지 마세요. HTML 소스에서 링크하려는 URL을 수동으로 변경해야 합니다.원하는 경우 나중에 외부 "리디렉션"을 (선택적으로) 구현할 수 있습니다. 이렇게 하면 URL이 변경됩니다. 그러나 이는 오직 이전 URL에 링크하거나 색인을 생성할 수 있는 검색 엔진 및 제3자를 리디렉션하는 데에만 해당됩니다. 따라서 이는 SEO를 위한 것이지 앱을 "작동"시키기 위한 것이 아닙니다.
요약하면 다음 순서로 됩니다.
/server/ServerName
형식의 URL로 연결하세요./server/?Server=ServerName
(또는/server/index.php?Server= ServerName
)으로 리디렉션하세요. >)를/server/?Server=ServerName
(或/server/index.php?Server=ServerName) 到
/server/ServerName
(표준 URL)로 변경하세요./server/ServerName
(规范 URL/您要链接到的 URL)重写为/server/index.php?Server=ServerName
(표준 URL/링크하려는 URL)의 요청을/server/index.php?Server=ServerName
(요청을 처리하는 기본 파일)로 내부적으로 다시 작성합니다.루트
으아악.htaccess
파일에서:이는 마지막 규칙에서
END
플래그를 사용할 수 있도록 Apache 2.4를 사용한다고 가정합니다. 이렇게 하면 "다시 작성된" 요청 대신 직접 요청을 확인하는 첫 번째 규칙에 추가 condition이 필요하지 않습니다(리디렉션 루프 방지).첫 번째 규칙("리디렉션")에서
에서 캡처된index.php
부분은 선택 사항입니다.%1
역참조에는 이전index.php
部分是可选的。%1
反向引用包含在前面的条件中捕获的Server
URL 参数的值。Server
conditionServer
URL 매개변수의 값이 포함되어 있습니다.서버
URL 매개변수는 비어 있지 않아야 하며 (이전 규칙에서 지정한 정규 표현식에 따라) 점이나 슬래시를 포함할 수 없습니다. 그렇지 않으면 리디렉션되거나 다시 작성되지 않습니다. 정규식 문자 클래스의 리터럴 점에는 백슬래시 이스케이프가 필요하지 않습니다. 🎜귀하의 예를 바탕으로 요청한 URL 이 후행 슬래시(예:
끝에 있는 선택적/server/ServerName//server/ServerName
)로 끝나지 않는다고 가정합니다. /code >), 그래서RewriteRule
/server/ServerName
而不是 /server/ServerName/),因此我删除了RewriteRule
pattern 末尾的可选/?
pattern/?
마지막 규칙을 제거했습니다. 귀하의 로그 발췌 내용은 그렇지 않은 것으로 보입니까? 후행 슬래시 및 비후행 슬래시 URL을 허용해야 하는 경우 중복 콘텐츠(슬래시)를 승격시키는 "다시 쓰기"의 일부가 아니라 URL을 정규화하기 위해 별도의 "리디렉션"으로 구현해야 합니다. 슬래시가 없는 URL은 다른 URL입니다.)Server
URL 参数值中期望的值,NE
(noescape
) 标志可能是也可能不是必需的。QUERY_STRING
서버 변수를 기반으로 인코딩된 URL입니다..htaccess
中使用PT
(passthrough
) 标志,因为这是此上下文中的默认行为。 (PT
server 또는 vhost 컨텍스트에서 mod_rewrite를 사용할 때만 관련된 플래그를 사용할 필요가 없습니다. )