htaccess는 매개변수가 있는 하위 디렉터리에 대한 액세스를 허용하지 않습니다.
P粉785905797
P粉785905797 2024-03-30 20:05:48
0
1
453

SEO URL에 대한 htaccess를 만들려고 하는데 매개변수가 있는 하위 폴더를 제외하고 모든 URL이 잘 작동하고 사이트 폴더로 리디렉션되는 htaccess를 만들었습니다.

sitefolder은 내 루트 디렉터리이고 내 모든 파일이 거기에 있습니다.

예: URL은 다음과 같아야 합니다.

으아아아

htaccess에서는 다음과 같습니다:

으아아아

첫 번째 매개변수는 id이고 두 번째 매개변수는 slug이지만 두 URL 중 어느 것도 url로 이동하지 않습니다.

이것은 내 모든 htaccess 코드입니다:

으아아아

이것이 subcat.php에서 매개변수를 가져오는 방법이고 오류 시 인덱스로 리디렉션되지 않으므로 PHP 때문은 아닌 것 같습니다.

으으으으

P粉785905797
P粉785905797

모든 응답(1)
P粉450079266

If subcat.php 被调用(正如您在评论中所述),那么 .htaccess 不是问题。但是您发布的任何代码中都没有重定向到 index.php(또는 모든 종류의 리디렉션).

그러나 다음 줄에는 런타임 오류가 있는 것 같습니다.

으아아아

is_numeric() 只是测试参数是否为数字并返回布尔值,它不会返回该变量的数字值,这正是您所期望的。因此,无论 q 값이 무엇이든 SELECT는 항상 실패합니다(또는 첫 번째 항목을 반환합니다).

지정된 URL 매개변수의 실제 값을 검색하려면 다음과 같은 것이 필요할 수 있습니다.

으아아아

그러나 먼저 이러한 URL 매개변수(예: $_GET 변수)가 전달되었는지 확인해야 합니다. 그렇지 않으면 스크립트가 E_NOTICE 메시지를 발행합니다.


업데이트:

RewriteRule 지시문과 충돌:

http://localhost/sitefolder/subcat/38/web-design时,它将被此处的第一条规则捕获,该规则将请求重写为detail.php? q=subcat/39&slug=web-design,而不是您期望的 subcat.php 。这可能失败,因为q=subcat/39可能无效(我猜是触发了到/sitefolder/)에서 리디렉션을 요청하는 경우?

충돌을 방지하려면 이러한 규칙의 순서를 변경하거나 정규식을 더 구체적으로 만들어야 합니다. 예를 들어. q 应该是数字 ID,则仅匹配数字值 (d+)이면 말 그대로 anything(.*) 대신 현재 일치하는 항목입니다.

정규 표현식에 문자열 끝 앵커도 포함해야 합니다. 그렇지 않으면 이러한 규칙이 다시 작성된 URL과 일치하여 불필요한 루프를 발생시킵니다. 예:

으아아아

또한 여기서 NC 标志,因为它可能会通过允许 contact-usNC 플래그를 사용하는 것에 대해 의문을 제기합니다. 왜냐하면 잠재적으로 contact-us 및 CONTACT-US

(및 그 사이의 모든 항목)가 동일한 리소스에 액세스할 수 있게 해주기 때문입니다.

요약

즉, 규칙은 다음과 같아야 합니다.

으아아아 w[a-zA-Z0-9_] (

w는

[a-zA-Z0-9_]의 단축 문자 클래스입니다.)

🎜정규식을 더욱 구체적으로 작성하면 충돌을 피할 수 있습니다. 이 명령은 위에서 아래로 실행됩니다. 첫 번째 일치 규칙이 승리합니다. 🎜
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿