찾다

 >  Q&A  >  본문

htaccess는 매개변수가 있는 하위 디렉터리에 대한 액세스를 허용하지 않습니다.

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

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

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

으아아아

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

으아아아

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

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

으아아아

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

으으으으

P粉785905797P粉785905797228일 전419

모든 응답(1)나는 대답할 것이다

  • P粉450079266

    P粉4500792662024-03-31 14:53:01

    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/)에서 리디렉션을 요청하는 경우? < /p>

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

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

    으아아아

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

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

    요약

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

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

    w는

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

    🎜정규식을 더욱 구체적으로 작성하면 충돌을 피할 수 있습니다. 이 명령은 위에서 아래로 실행됩니다. 첫 번째 일치 규칙이 승리합니다. 🎜

    회신하다
    0
  • 취소회신하다