2016-09-26 69 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等,这通常不是你想要的。

相关问题