0

首先我解释一下 index.php 在我的站点中是如何工作的。

首先,index.php 具有过滤 GET 名称的功能,如果它不为 null 并且存在我的页面的名称(我定义的),例如博客、照片、模式、关于和联系,因此包括具有相同名称的文件请求得到

我的 htacess 适用于单页,例如模式、关于、联系方式,但现在我想添加“子类别”,例如 blog/hello-world。

blog.php 的工作方式与索引相同,它包含来自 GET 变量(post)的同名文件。

换句话说,让我们看看实际情况。

index.php?page=modalities -> /
modalities index.php?page=blog&post=nameofpost -> 我可以正确看到,但是使用htaccess时与第一条规则有冲突,因为它将博客作为单个文件进行分析并且没有空间到另一个 GET 变量

我想将 index.php?page=blog&post=nameofpost 重写为 /blog/nameofpost 而不会与第一条重写规则发生冲突。

RewriteRule (.*) index.php?pg=$1 [L]

如果我在重写规则的过程中使用更多字符串,我不能将其用于我的单个页面,例如联系人 (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。

预先感谢您的关注。

4

1 回答 1

1

以下 RewriteRule 将允许您有两个级别,将路径的第一部分重写为,将路径pg=的其余部分重写为post=

RewriteRule ^([^/]+)/([^/]+)/?$ index.php?pg=$1&post=$2 [L]

为确保这不会干扰您现有的规则,您应该更改现有规则RewriteRule以匹配任何不是路径分隔符 ( /) 的内容:

RewriteRule ^([^/]*)/?$ index.php?pg=$1 [L]
于 2013-06-28T13:10:05.153 回答