首先我将解释index.php在我的网站中是如何工作的。
首先,index.php有一个过滤GET名称的功能,如果不为空,并且存在我的页面的名称(我定义的),如博客、照片、模态、about和contact,因此包括具有相同名称的请求GET 的文件
我的htaccess适用于单个页面,如模态、about、contact,但现在我想添加"子类别",如博客/你好世界。
blog.php的工作方式和索引相同,它包含一个来自GET变量(post)的同名文件。
换句话说,让我们看看实际情况。
index.php?page=模态->/模态
index.php?page=blog&post=post的名字->我看得对但是当使用htaccess时,会与第一条规则发生冲突,因为它将博客分析为单个文件,并且没有空间访问另一个GET变量
我想重写index.php?page=blog&post=nameofpostto/blog/nameofpost与重写的第一条规则不冲突。
重写规则(.*)index.php?pg=$1[L]
如果我在重写规则的htaccess中使用了更多的字符串,而我不能将其用于contact(index.php?pg=contact/contact)这样的单个页面,这将导致404错误。
我的index.php(结构)
$url = addslashes($_GET["pg"]);
if(isset($url) && ($url === "photos" || $url === "time" || $url === "modalities" || $url === "contact" || $url === "blog" || $url === "about")){
include "page/{$url}.php";
return $lock = true;
}elseif($url === "" || $url === "home" || !isset($url) || (empty($url) || trim($url)==='')){
include "home.php";
}else{
echo "Error 404";
}
.htaccess文件:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php?pg=$1 [L]
ErrorDocument 404 /404
ErrorDocument 403 /404
ErrorDocument 404 /404
Options -Indexes
IndexIgnore *
我知道.htaccess文件没有配置,因为我找不到解决方案,同时使用两种类型的url。
提前感谢您的关注。
下面的RewriteRule将允许您有两个级别,将路径的第一部分重写为pg=
,将其余部分重写为post=
:
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?pg=$1&post=$2 [L]
为了确保这不会干扰您现有的规则,您应该更改现有的RewriteRule
以匹配不是路径分隔符(/
)的任何内容:
RewriteRule ^([^/]*)/?$ index.php?pg=$1 [L]