簡體   English   中英

使用 .htaccess 重寫 Mod

[英]Mod rewrite using .htaccess

我正在嘗試使用此信息[從網站復制] 重寫我的模式,但它不起作用.. 有什么問題,請給出正確答案..

Apache重寫引擎主要用於將www.yoursite.com/product.php?id=123等動態url轉為www.yoursite.com/product/123等靜態且用戶友好的url

RewriteEngine on
RewriteRule ^product/([^/.]+)/?$ product.php?id=$1 [L]

另一個例子,重寫自:

www.yoursite.com/script.php?product=123 到 www.yoursite.com/cat/product/123/

RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2

您似乎誤解了重寫模塊(特別是您的規則)的實際作用。

當您瀏覽到:

 localhost/abc/product.php?id=23

RewriteRule 不會被調用,也不應該做任何事情。 這里沒有任何問題,您只是瀏覽到錯誤的URL

網址轉換

http://www.yoursite.com/product/123         <- URL that user goes to
http://www.yoursite.com/product.php?id=123  <- Rewritten URL that the server sees

已解釋的重寫規則

重寫規則分為三個部分(不包括RewriteRule部分...)

  1. 它與 url 匹配的正則表達式
  2. 它轉換成的網址
  3. 其他選項

鑒於您的規則:

RewriteRule ^product/([^/.]+)/?$ product.php?id=$1 [L]

正則表達式是: ^product/([^/.]+)/?$
新網址: product.php?id=$1
選項: [L]

這意味着用戶瀏覽到不錯的url http://www.yoursite.com/product/123 (並且您的所有鏈接都指向不錯的URL),然后服務器與正則表達式匹配並將其轉換為新的 URL只有服務器才能看到

實際上,這意味着您有兩個 URL 指向同一個頁面……不錯的URL 和不不錯的URL 都會將您帶到同一個地方。 不同之處在於,對普通公眾和其他追求您網站的人隱藏了不美觀/標准的URL。


正則表達式

未重定向http://mysite.com/product/image.jpg的原因是您在RewriteRule使用的正則表達式。

解釋

^product/([^/.]+)/?$
  • ^ => 字符串開始
  • product/ => 匹配文字字符串product/
  • ([^/.]+) => 匹配一個或多個字符的捕獲組,直到下一個/.
  • /?$ => 匹配一個可選的/后跟字符串的結尾

鑒於網址:

http://mysite.com/product/image.jpg

您的正則表達式匹配product/image但隨后遇到. 這會停止匹配......因為那不是字符串$的結尾,規則無效,因此轉換永遠不會發生。

您可以通過將字符類[^/.]更改為[^/]或 - 我的首選方法 - 刪除字符類並簡單地使用.+ (無論如何,您都可以將所有內容捕獲到字符串的末尾)

RewriteRule ^product/([^/]+)/?$ product.php?id=$1 [L]
RewriteRule ^product/(.+)/?$ product.php?id=$1 [L]

嘗試

RewriteRule ^product/([a-zA-Z0-9_]+)/?$ product.php?id=$1 [L]

暫無
暫無

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

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