簡體   English   中英

刪除查詢字符串並重定向(重寫規則和重寫cond)

[英]Removing the the query string and redirecting (rewrite rule and rewrite cond)

我目前正在嘗試設置一個重寫規則,以設置內部重定向以實現對SEO更友好的url結構。

我想展示:

/find-teacher/primary-school.php

而不是悲傷的樣子:

/find-teacher/subject-class-choose.php?school=primary-school

在閱讀了有關重寫規則和cond的一些帖子和教程之后,我想到了:

在我的choice-school.php中,我具有一個漂亮的URL鏈接:

<a href="https://www.example.com/find-teacher/primary-school.php">
Primary School</a>

在我的.htaccess中:

RewriteCond %{REQUEST_URI} ^find-teacher/primary-school.php$
RewriteRule ^find-teacher/([a-z-]+)-([0-9]+).php$ /find-teacher/subject-class-choose.php?school=$1 [NC]

現在,如果我理解正確,則RewriteCond部分將檢查是否請求了以下URL。 如果是這種情況,則([az-]+)-([0-9]+)的部分將替換為替換部分的$1/find-teacher/subject-class-choose.php?school=$1

問題是,如果我單擊/find-teacher/primary-school.php重定向到錯誤頁面。

您在這里不需要RewriteCond和RewriteRule,因為它們(或者應該)都在檢查同一件事。

但是,當前沒有可以同時匹配兩種模式的URL。 讓我們來解決這個問題。

要專門檢查URL /find-teacher/primary-school.php ,您可以編寫:

RewriteRule ^find-teacher/primary-school.php$ /find-teacher/subject-class-choose.php?school=primary-school [NC]

下一步是使用() “捕獲”“小學”,並使用$1將其動態地放置到目標上:

RewriteRule ^find-teacher/(primary-school).php$ /find-teacher/subject-class-choose.php?school=$1 [NC]

最后,我們可以使用regex [az-]+使模式匹配任何字母或連字符而不是確切的字符串:

RewriteRule ^find-teacher/([a-z-]+).php$ /find-teacher/subject-class-choose.php?school=$1 [NC]

在問題的規則中,您已在正則表達式中添加了額外的部分: -([0-9]+) 該匹配-然后是一個數字。 要獲取該數字,您可以將$2放置在目標中的某個位置:

RewriteRule ^find-teacher/([a-z-]+)-([0-9]+).php$ /find-teacher/subject-class-choose.php?school=$1&id=$2 [NC]

這將匹配/find-teacher/primary-school-123.php類的/find-teacher/primary-school-123.php ,並將其轉換為/find-teacher/subject-class-choose.php?school=primary-school&id=123

最后兩個注意事項:

  • 根據您的Apache配置設置方式 ,您可能需要也可以不需要在模式中包含前導/ ,即以^/開頭
  • 我發現調試重寫規則的一種好方法是通過將R=temp添加到標志(例如[NC,R=temp] )來使它們重定向瀏覽器。 這樣,您不必依靠您的PHP代碼即可告訴您所請求的URL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM