[英]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
部分...)
鑒於您的規則:
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.