mod_rewrite冲突、两个字符串和一个包含其他字符串的文件


mod_rewrite conflict, two strings, and a file including others

首先我将解释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]