[英]Apahce/.htaccess - Redirect all requests to a single page except assets used by that page
[英]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.