2011-09-17 92 views
1

所以我想要做的是创建一个网站,其中index.php将根据查询字符串发送的参数将所有网页拼凑在一起。帮助重写网址

我要“改写”,从形式的网址:http://example.com/index.php?p=cat1/page1喜欢的东西http://example.com/cat1/page1

我试图让使用.htaccess mod_rewrite的规则,但已经无法做什么工作。

我知道这些东西有很多信息..我花了几个小时的时间已经阅读了它并修补了一些东西,但我感觉卡住了。我所做的一切似乎都没有结果。

mod_rewrite并在服务器上装载(说的phpinfo())

我的.htaccess代码:

RewriteEngine On 
RewriteRule ^/([home|cat1|cat2]/)?([a-zA-Z]+_?)*/?$ /index.php?p=$1/$2 [L] 

我的index.php代码:

<?php 

if (isset($_GET["p"])){ 
    $page = htmlspecialchars($_GET["p"]); 
}else{ 
    $page = "home"; 
} 

include('./template/header.php'); 

if (is_dir("./pages/$page")){ 
    include("./pages/$page/overview.php"); 
}else{ 
    if (file_exists("./pages/$page.php")){ 
     include("./pages/$page.php"); 
    }else{ 
     //not found 
     echo '<h1 id="pageNotFound">Page Not Found</h1>'; 
    } 
} 
include('./template/footer.php'); 

?> 
+1

'include(“./ pages/$ page.php”)'这是一个文件包含漏洞;您应该通过删除每个非alnum字符来过滤'$ page',或者为'$ page'使用允许值的白名单。 – arnaud576875

回答

2

这是你的.htaccess修复:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !\.(jpg|jpeg|gif|png|css|js|pl|txt)$ 
RewriteRule ^(home|services)/([a-zA-Z_\-]+)(\/?)$ /NEP2/index.php?p=$1/$2 [NC,QSA,L] 

抗体在PHP中,你能移动public_html文件夹下面的页面吗?

+0

谢谢!我会在那里修补它。至于页面移动...为了安全我假设?当谈到这件事时,我是一个新手,并希望有人可能会评论我的代码和方法的质量。所以非常感谢。 –

+1

@Zach,是的,你是对的。通过做file_exists是非常好的。我会建议确保$页面只包含字母,数字和“/”。你永远不会看到一个URL或½或±(SEO不喜欢那样)。 –

+0

所以......它似乎仍然不工作,不幸的是。 http://localhost/NEP2/index.php?p = services/overview将我带到正确的页面,但http:// localhost/NEP2/services/overview画空白[404] –