Apache 2.4 URL 주소:/server/?Server=ServerName 至 /server/ServerName
P粉038161873
P粉038161873 2024-01-16 19:21:09
0
1
485

단순히 /server/?Server=ServerName 重写为 /server/ServerName,以便 ServerName 매개변수의 URL을 PHP로 전달하려고 합니다.

현재 내 .htaccess 파일에 다음이 있습니다:

으아아아

보려고 /server/ServerName/server/?Server=ServerName하려고 할 때 404 오류가 발생했습니다.

이것은 내 재작성 로그입니다:

으아아아

이 시점에서는 답답하고 간단한 것이 빠진 것 같아서 약간의 안내가 필요합니다.

조정해 보았습니다:

  • mod_rewrite 쿼리 문자열이 404를 반환합니다
  • .htaccess
  • 에서 $1과 %1의 차이점
  • .htaccess RewriteRule을 사용할 때 404 오류가 발생하는 이유는 무엇입니까?
  • https://httpd.apache.org/docs/2.4/rewrite/remapping.html
  • 의 예제 사용
  • https://cheatography.com/davechild/cheat-sheets/mod-rewrite/의 인용 태그

저는 코드가 실제로 재작성되는지 알아보기 위해 코드를 재작성하는 방법도 조사해 왔습니다.

아래 코드를 사용하여 디렉토리를 성공적으로 옮겼으며 /test2/ 重写为 /server/?Server=ServerName 페이지가 잘 로드되었으므로 모듈이 활성화되어 실행 중임을 알 수 있습니다.

으아아아

이 변경을 시도했지만 성공하지 못했습니다. URL은 다시 작성되지 않지만 페이지는 로드됩니다. Apache 2.4 .htaccess 친화적인 URL 재작성

RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} Server=([^&]+)
RewriteRule "^server/$" "/server/%1/?"

P粉038161873
P粉038161873

모든 응답(1)
P粉182218860

잘못된 방향으로 가고 있는 것 같습니다. 연결해야 하는 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를 위한 것이지 앱을 "작동"시키기 위한 것이 아닙니다.

요약하면 다음 순서로 됩니다.

  1. HTML 소스 코드의 URL을 변경하여 /server/ServerName 형식의 URL로 연결하세요.
  2. (선택 사항) 기존 URL 구조를 변경하는 경우 직접 요청을 /server/?Server=ServerName(또는 /server/index.php?Server= ServerName)으로 리디렉션하세요. >)를 /server/?Server=ServerName (或 /server/index.php?Server=ServerName) 到 /server/ServerName(표준 URL)로 변경하세요.
  3. /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 参数的值。 Servercondition

에서 캡처된 Server 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) 标志,因为这是此上下文中的默认行为。 (PTserver 또는 vhost 컨텍스트에서 mod_rewrite를 사용할 때만 관련된 플래그를 사용할 필요가 없습니다. )

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿