Mod-Rewrite

使用 mod-rewrite 將動態 URL 轉換為靜態 URL(可能是 RewriteRule 問題)

  • February 7, 2013

我已經將一個站點從一個主機移動到另一個主機,並且在這樣做的過程中遇到了無法下載我的 .htaccess 文件的陷阱。

我正在嘗試根據早期(可能不工作)保存的副本重建所說的 .htaccess,但我得到的只是 404 頁。換句話說,這個簡單的重寫規則有問題,但我認為 mod_rewrite 工作正常,因為我不再看到“內部伺服器錯誤 500”類型錯誤,並且其他虛擬主機站點在同一台機器上使用 mod_rewrite 執行。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^([^/.]+)/?$ index.php?page=$1 [L]
</IfModule>

我網站的範例(實際,工作)頁面:

site.com/index.php?page=tips

我所有的連結,希望地址欄應該是這種形式:

site.com/tips/

我以為我明白這一點;它不是非常複雜。我已經根據各種網站的建議對 RewriteRule 行進行了各種組合和故障排除。我用Google搜尋了兩天,發現一些與我正在做的事情接近的東西,但沒有完全匹配。每次進行更改時,我都會在伺服器上重新啟動 apache 服務,進入本地電腦上的 Chrome,然後按 Ctrl+F5 清除記憶體並刷新;我有沒有機會錯過“乾淨重新載入”步驟?

整個站點是通過 index.php 進行的,在我更好地理解正則表達式之前,我不打算通過進一步的嵌套來使事情複雜化。任何幫助是極大的讚賞!

旁注:我在 Apache v2.2.22 上,我似乎無法讓這個版本的“RewriteLogs”功能正常工作(當然,不使用 .htaccess)或者我今天不會發布這個菜鳥問題。在 2.4 中,此功能無論如何都不再有效(日誌記錄進行了全面檢修),但我似乎無法在我的 OpenVZ Ubuntu 12.04 x64 伺服器上使用 apt-get 升級到該功能。

結果是我的伺服器上沒有啟用mod_rewrite 。我通過在站點目錄中放置一個 phpinfo.php 文件並檢查 mod_rewrite 的“載入模組”部分來檢查這一點,這確實是缺失的。

我用 啟用了 mod_rewrite,用sudo a2enmod rewrite再次檢查了模組列表apache2ctl -M,一切又開始工作了。

更奇怪的是,mod_rewrite 以某種方式關閉了整個伺服器,而不僅僅是這些頁面。鑑於我正在使用他們各自的 .htaccess 文件為其他站點提供服務,並且它們也無法正常執行(這就是讓我知道這一點的原因),我很高興我相對較快地發現了這一點。

我還了解到 Ubuntu 有自己的 apache 更新批准/測試小組,他們還沒有對 Apache 的 2.4 更新檔進行認證,而且可能需要很長時間,因為它會帶來一些重大的變化。

引用自:https://serverfault.com/questions/476176