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

时间:2013-06-28 05:56:53

标签: php algorithm mod-rewrite logic structure

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

首先,index.php有一个过滤GET名称的函数,如果不是null并且存在我的页面的名称(我定义的),比如博客,照片,模态,关于和联系,所以包括具有相同的文件请求名称GET

我的htacess适用于单页,如模态,关于,联系,但现在我想添加“子类别”,如博客/你好世界。

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

换句话说,让我们看看行动。

index.php?page = modalities - > /方式
index.php?page = blog& post = nameofpost - >我能正确看到 但是当使用htaccess与第一条规则发生冲突时,因为它将博客分析为单个文件并且没有其他GET变量的空间

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

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

如果我在重写规则的使用中使用更多的字符串,我无法使用我的单个页面,例如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文件没有配置,因为我无法找到解决办法,同时有两种类型的网址。

提前感谢您的关注。

1 个答案:

答案 0 :(得分:1)

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

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

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

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