我有一个美食博客网站,许多帖子存储在数据库中。当有人点击某篇文章的链接时,网站会在数据库中搜索该文章并将其呈现在模板中。我不存储每个帖子的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