Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用htaccess和PHP请求数据和重写URL_Php_.htaccess_Web_Mod Rewrite - Fatal编程技术网

使用htaccess和PHP请求数据和重写URL

使用htaccess和PHP请求数据和重写URL,php,.htaccess,web,mod-rewrite,Php,.htaccess,Web,Mod Rewrite,这一次我被卡住了,所以我希望有人能给我指出正确的方向 我有一个数据库保存我所有的文章,叫做博客文章内容。然后,我有一个viewpost.php文件,该文件请求post内容与“id”上的get请求相匹配,如下所示: <?php require($_SERVER['DOCUMENT_ROOT'] . '/includes/config.php'); $stmt = $db->prepare('SELECT * FROM blog_posts_content WHERE postSlug

这一次我被卡住了,所以我希望有人能给我指出正确的方向

我有一个数据库保存我所有的文章,叫做博客文章内容。然后,我有一个viewpost.php文件,该文件请求post内容与“id”上的get请求相匹配,如下所示:

<?php require($_SERVER['DOCUMENT_ROOT'] . '/includes/config.php');

$stmt = $db->prepare('SELECT * FROM blog_posts_content WHERE postSlug = :postSlug');
$stmt->execute(array(':postSlug' => $_GET['id']));
$row = $stmt->fetch();

//if post does not exists redirect user.
if($row['postID'] == ''){
    header('Location: ./');
    exit;
}

?>
testfolder包含以下文件:

索引 路标 猫柱

所以我将index.php作为当然的主页,viewpost请求发布内容,然后catpost显示类别

现在我希望我有足够详细的背景,所以现在来讨论这个问题

上面没有显示页面,所以如果im在索引上并单击上面列出的带有slug的链接,我会根据php请求重定向回索引页面

如果我只是使用这个htaccess,并将postSlug作为postname,那么我就可以让post显示出来

RewriteEngine On
RewriteBase /testfolder/

RewriteRule ^category/(.*)$ catpost.php?id=$1 [L]
RewriteRule ^a-(.*)-(.*)$ archives.php?month=$1&year=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteRule ^(.*)$ viewpost.php?id=$1 [QSA,L]
然而,我的url以

我怀疑是php请求还是htaccess规则


我如何解决这个问题

拥有路由器可以简化这一过程。下面是如何构建一个

这将简化您试图完成的任务。大多数PHP框架、Wordpress和其他CMS都做了类似的事情

.htaccess 这会将所有请求重写到
index.php

<IfModule mod_rewrite.c>
        RewriteEngine On

        RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>

重新启动发动机
重写秒$1!\。(gif | jpe?g | png)$[NC]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$/index.php/$1[L]
从那里,您可以将请求路由到正确的文件

index.php
感谢您的建议,并对与您的答案差距太大表示歉意。我在试着理解你的回答。我不确定应该在开关功能之间放置什么。抱歉,如果这看起来很明显。我已经更新了我的答案,希望能澄清你需要做什么。如果你还需要帮助,请告诉我。如果你这样做了,让我知道你尝试了什么,什么不起作用。谢谢
<IfModule mod_rewrite.c>
        RewriteEngine On

        RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>