2016-09-26 100 views
1

我有一個美食博客網站,許多帖子存儲在數據庫中。當有人點擊某篇文章的鏈接時,網站會在數據庫中搜索該文章並將其呈現在模板中。我不存儲每個帖子的HTML文件。將所有請求重定向到單個頁面

現在,我通過處理404錯誤(由於所請求的HTML文件不存在而關閉)並從那裏搜索數據庫來完成此操作。我知道這是不對的。

如何設置我的Web服務器(運行在Raspberry Pi上的Apache),以便所有請求都進入一個頁面,這將執行搜索並將用戶發送到正確的頁面?這是正確的做法嗎?

+0

你有沒有看過使用htaccess文件,我可以添加一個例子? – atoms

+0

[使用htaccess重寫/重定向,使單個PHP文件可以根據GET/POST變量顯示數據](http://stackoverflow.com/questions/2441140/using-htaccess-rewrite-redirect-so-single-php -file可任意顯示數據,根據到) – emiliopedrollo

回答

0

您需要在公共根目錄中使用正確的.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> 
1

你可以做到這一點與文件,放在您的網站根目錄名爲.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等,這通常不是你想要的。

相關問題