有沒有一種方法可以使用PHP(和/或.htaccess)來重寫頁面的URL。我可以使用PHP和/或htaccess重寫URL但不重定向嗎?
例如,如果一個用戶進入www.mysite.com/french他們實際上訪問是www.mysite.com/index.php?lang=fr
而不是重定向的頁面。
有沒有一種方法可以使用PHP(和/或.htaccess)來重寫頁面的URL。我可以使用PHP和/或htaccess重寫URL但不重定向嗎?
例如,如果一個用戶進入www.mysite.com/french他們實際上訪問是www.mysite.com/index.php?lang=fr
而不是重定向的頁面。
,你可以找到幾個examples of URL rewriting flavors,在某種程度上,這就夠用了這樣的事情在一個.htaccess文件:
RewriteEngine on
RewriteRule ^french(/|)$ /index.php?lang=fr [flag]
哪裏[flag]
可以是下列之一:
[PT]
[L,PT]
[QSA]
[L,QSA]
你可能想看看PT (passthrough) flag docs或RewriteRule flags docs。另外,請注意您的鏈接指向的是什麼:實際上,RewriteRule第一個參數是一個正則表達式,用於匹配要重寫的URL。目前,
^french(/|)$
匹配「法國」,該域名之後,接下來無論是斜線(/)或沒有(這是的(/|)
的意思);也就是說,它會匹配www.mysite.com/french和www.mysite.com/french/,但沒有別的。如果您需要分析查詢字符串參數或子路徑,那麼您可能需要更復雜的正則表達式。
是的,使用Apache mod_rewrite和.htaccess文件中的適當規則。
上的mod_rewrite的文檔是在這裏:http://httpd.apache.org/docs/current/mod/mod_rewrite.html
你想用mod_rewrite
和.htaccess文件來實現這一目標。
RewriteEngine On
RewriteBase/
RewriteRule ^french/(.*)$ /index.php?lang=fr [L,QSA]
這不是'[PT]'標誌的用途。 http://httpd.apache.org/docs/current/rewrite/flags.html#flag_pt – 2011-05-12 14:27:07
@Rocket:mod_rewrite實際上是一個URL到文件名解析器。不管它重寫什麼,默認情況下都是最終結果。 '[PT]'是一種攻擊,它允許它進行URL到URL的重寫,然後傳回Apache,以便進一步處理像mod_alias這樣的模塊。儘管如此,它確實有點不合適。 – cHao 2011-05-12 14:31:07
@cHao:我知道'[PT]'有什麼作用。我在評論說,「阻止Apache重定向到頁面,同時靜靜地加載它」並沒有什麼意義。 – 2011-05-12 14:37:25