[英]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.