[英]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
。
最后兩個注意事項:
/
,即以^/
開頭 R=temp
添加到標志(例如[NC,R=temp]
)來使它們重定向瀏覽器。 這樣,您不必依靠您的PHP代碼即可告訴您所請求的URL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.