2011-07-28 195 views
0

我想確保訪問者正好在網站的主頁上。 這是正確的匹配,如果網址是:preg_match url中的尾部斜槓

  • www.site.com
  • www.site.com/
  • www.site.com/index.php

    preg_match("/^(www.)?(".$host.")(\/)?(index.php)?$/", $url, $matches) 
    

把這樣的最後兩個匹配分開似乎不太正確,但它起作用 另外還有任何瀏覽器不會將www.site.com重定向到ww w.site.com/?

+1

看起來不錯。 你用'()'做了很多捕獲組。你可以完全擺脫我認爲的團體。但是,如果你擔心,你有沒有考慮讓它們成爲非捕獲組?(?:)(按照Perl的正則表達式)? – kevlar1818

回答

1

關閉。我會去與此相反:

preg_match("/^(?:www\.)?(?:".$host.")(?:\/(?:index\.php)?)?(?:\?.*)?$/", $url, $matches) 

在這裏的區別是:

  • 擺脫.字符意味着作爲字面點(點通常意味着正則表達式「以外的任何\n\r字符」)。
  • 如果index.php存在,則在index.php之前需要/
  • (可選)允許GET參數(\?.*部分)。
  • 非捕獲組,因爲你似乎沒有興趣通過捕獲。

除此之外,它看起來不錯。

+0

謝謝!特別是對於點 –