簡體   English   中英

將所有請求重定向到單個頁面

[英]Redirect all requests to single page

我有一個美食博客網站,許多帖子存儲在數據庫中。 當有人點擊帖子的鏈接時,網站會在數據庫中搜索帖子並將其顯示在模板中。 我不會為每個帖子存儲一個 HTML 文件。

現在,我通過處理 404 錯誤(由於請求的 HTML 文件不存在而關閉)並從那里搜索數據庫來做到這一點。 我知道這是不對的。

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

您可以使用放在網站根目錄中的名為.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]

這會將任何不引用實際現有文件或目錄的 URL 重寫到您的index.php ,您可以使用它來處理請求。

例如,如果有人訪問http://yourdomain.com/article ,路徑將在內部重寫為index.php?path=article ,您可以使用$_GET['path']訪問該路徑。

注意:如果您想通過單個入口點真正地提供所有內容,您可以刪除中間的兩條線,然后將所有內容發送到那里。 包括圖像、腳本、CSS 等,這通常不是您想要的。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM