我有一個美食博客網站,許多帖子存儲在數據庫中。當有人點擊某篇文章的鏈接時,網站會在數據庫中搜索該文章並將其呈現在模板中。我不存儲每個帖子的HTML文件。將所有請求重定向到單個頁面
現在,我通過處理404錯誤(由於所請求的HTML文件不存在而關閉)並從那裏搜索數據庫來完成此操作。我知道這是不對的。
如何設置我的Web服務器(運行在Raspberry Pi上的Apache),以便所有請求都進入一個頁面,這將執行搜索並將用戶發送到正確的頁面?這是正確的做法嗎?
我有一個美食博客網站,許多帖子存儲在數據庫中。當有人點擊某篇文章的鏈接時,網站會在數據庫中搜索該文章並將其呈現在模板中。我不存儲每個帖子的HTML文件。將所有請求重定向到單個頁面
現在,我通過處理404錯誤(由於所請求的HTML文件不存在而關閉)並從那裏搜索數據庫來完成此操作。我知道這是不對的。
如何設置我的Web服務器(運行在Raspberry Pi上的Apache),以便所有請求都進入一個頁面,這將執行搜索並將用戶發送到正確的頁面?這是正確的做法嗎?
您需要在公共根目錄中使用正確的.htaccess規則,並且需要啓用apache2 mod_rewrite模塊。
在Ubuntu,你可以可以用下面的命令啓用它:
sudo a2enmod rewrite
.htaccess文件可能看起來像以下:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule^index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
你可以做到這一點與文件,放在您的網站根目錄名爲.htaccess
並使用mod_rewrite模塊。您需要確保Apache配置中啓用了.htaccess和mod_rewrite。但是,一旦啓用,你可以做這樣的事情:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]
這將改寫,它不是指實際存在的文件或目錄添加到您index.php
,你可以用它來處理請求的任何URL。
例如,如果有人訪問http://yourdomain.com/article
,路徑將在內部重寫爲index.php?path=article
,您可以使用$_GET['path']
訪問該路徑。
注意:如果您想通過單一入口點從字面上提供所有服務,則可以刪除兩條中間線,然後將所有內容都發送到此處。包括圖片,腳本,CSS等,這通常不是你想要的。
你有沒有看過使用htaccess文件,我可以添加一個例子? – atoms
[使用htaccess重寫/重定向,使單個PHP文件可以根據GET/POST變量顯示數據](http://stackoverflow.com/questions/2441140/using-htaccess-rewrite-redirect-so-single-php -file可任意顯示數據,根據到) – emiliopedrollo