參考來源:
http://chinablog.blog.51cto.com/276793/280278
一、問題背景
使用wordpress搭建網站,為了讓文章URL看起來漂亮一點,wordpress提供了設置-》固定鏈接設置-》選擇你喜歡的url結構。
所以,我們一般為了用戶看着這個url順眼一點,會進行url地址的自定義,比如:http://localhost/wordpress/archives/36.html,wordpress默認的是http://localhost/wordpress/archives/36,也就是說我們能自定義這個url結構。
二、問題存在
我就如圖所示選擇了數字型的url結構,然后保存設置,點擊站點查看。
看到的結果是Not Found。
下圖,無法顯示文章內容
三、解決問題
我忽略了一個問題,那就是要讓Apache支持mod_rewrite模塊,而我並沒有在Apache的配置文件中開啟。
開啟Mod_rewrite模塊方法:
1、直接打開apache\conf\httpd.conf
2、搜索 LoadModule rewrite_module modules/mod_rewrite.so (可能版本不一樣這個不一樣,不過Apache2都是這個),去掉前面的#
3、 搜索AllowOverride None 替換為 AllowOverride All
保存文件-》重啟Apache-》刷新站點
文章顯示了。如圖:
關於Mod_rewrite
mod_rewrite這個模塊是如何工作的呢?
mod_rewrite截獲符合特定條件的URL,並按照設定的規則將它們改寫成需要的URL。
比如,可以將 http://www.mysite.com/product.php?pid=123312 這樣的URL改寫成
http://www.mysite.com/product-123312.html 這樣的靜態URL
重寫的規則
重寫的規則的表達式:
RewriteRule 模式 替換 [選項]
RewriteRule 是一個簡單的命令告訴mod_rewrite這個模塊如何去重寫,關鍵的地方在於可以在模式和替換中使用正則表達式來匹配相應的字符,正則表達式的廣泛的靈活性能將動態的URL轉換成各式各樣的符合要求的靜態URL。看看這個重寫規則:
RewriteRule /products/([0-9]+)
/fancy/products.php?id=$1
當你在瀏覽器地址欄輸入 http://www.mysite.com/product/123 時,這個地址被重寫為 http://www.mysite.com/fancy/product.php?id=123
這樣,訪問者就無法知道你的程序真正放在那個目錄,程序的真正名字是什么,這也提高了網站的安全系數;這樣的URL也去掉了?=這些字符,易於搜索引擎的機器人爬行你的網站。
通過正則表達式,可以寫出更復雜的重寫規則:
RewriteRule ^/products$ /content.php
RewriteRule ^/products/([0-9]+)$ /content.php?id=$1
RewriteRule ^/products/([0-9]+),([ad]*),([0-9]{0,3}),([0-9]*),([0-9]*$)
重寫規則的選項有
- ‘forbidden’ 或 ‘f’ - 403 禁止
- ‘gone’ 或 ‘g’ - 410 gone
- ‘nocase’ 或 ‘NC’ - 大小寫敏感
- ‘next’/N’ - 回到第一條規則
- ’skip=N’ 或 ‘S=N’ - 跳過下面的N條規則
看到這里,又再次提醒我學習正則表達式,要學習的還有好多好多。