这是我的.htaccess
文件,它在/
目录中,并且正在工作。我想从我的站点中删除.php
扩展。所以,我使用下面的规则来完成。RewriteRule ^([^\.]+)$ $1.php [NC,L]
。
这工作,但我也想重定向我的博客文章,使用动态链接与此RewriteRule ^([^?]*) route.php?blog=$1
这些博客拉一个ID从数据库和嵌入到URL,这是正确的工作。
我的问题是,当我添加第一段代码来删除.php
扩展时,我的博客重定向停止工作。下面我将添加我的PHP代码,以备我做错了什么。
第一个
blog-single.php
<?php
$sql = "select * from categories c, articles a, relatedposts r where r.related_blog = ".$blog['id']." and a.id = r.related_post and c.catid = a.cat order by a.datetime";
$rows = $db->query($sql);
$found = $rows->num_rows;
if($found > 0)
{
?>
1条答案
按热度按时间vdgimpew1#
这里的“问题”是第一个规则将任何请求(不Map到文件或目录)重写到
route.php
,并在blog
URL参数中传递所请求的URL路径。因此,第二个规则(将.php
附加到任何不包含点的URL路径)永远不会成功。您需要反转规则,并在附加
.php
扩展名之前首先检查相应的.php
文件是否存在。任何未Map到.php
文件的请求都将失败到route.php
。例如:
原始子模式
[^?]*
不是必需的,因为查询字符串不是在与RewriteRule
* 模式 * 匹配的URL路径中传递的。请注意,这两个规则都不像原始指令那样处理对文档根目录(即主页)的请求。换句话说,您希望对
https://example.com/
的请求发生什么?是否也要将其重写为route.php
(是否已经重写)?如果是,则相应地设置DirectoryIndex
指令。例如,在.htaccess
文件的顶部:请注意,这将导致对“主页”的任何请求被发送到
route.php
,但没有blog
URL参数(无论如何它都将是空的)。**UPDATE:**尽管看你的PHP脚本,你并不期望
route.php
(我假设你的第一个脚本)处理文档根(即空的URL路径)?事实上,你的脚本似乎只期望3个URL路径段?在这种情况下,你应该考虑在.htaccess
中使正则表达式更严格,以防止你的脚本被不必要地调用。这将允许请求落入Apache的404错误文档。