2011-02-25 17 views
1

我有一个网站,目前有超过900个HTML文章目前可以查看任何人。我想更改它以限制仅通过成员资格查看某些文章。如果限制,我有标志在SQL数据库中的文章。有一篇文章索引与每篇文章的链接。该过程将检查文章是否受到限制,检查用户是否成员登录,然后显示,否则发送到登录页面或订阅页面。由于文章太多,我不能直接添加一些php来不显示文章。我的问题是在我的网页目录中放置这些文章页面的位置,以及如何防止某人直接访问该页面,但是一旦用户通过身份验证后又允许访问?任何输入赞赏。任何人都知道这方面的好参考书吗?网站的设计与限制内容的会员

回答

3

将文件移动到文档根目录之上,因此无法通过Web服务器进行访问。或者,将文件移动到您用密码保护的目录(.htaccess/.htpasswd对)。你永远不会泄露该密码,它只是为了防止直接访问这些文件。

然后,写一个代理文章的脚本。该脚本检查用户是否登录。如果不是,则将其重定向到登录页面。如果是,它从它的实际位置读取文章HTML,并发送它。

例:http://www.example.com/article.php?view=cooking.html

session_start(); 
if (!isset($_SESSION['logged_in'])) { 
    header("Location: login.php"); 
} else { 
    readfile("/path/to/articles/" . $_GET['view']); 
} 

你会想要做一些卫生上$_GET['view'],以确保它不包含任何东西,但一个项目的名称。

您甚至可以使用mod_rewrite将您的当前URL和链接重写到您的.httaccess/httpd.conf中的代理脚本。事情是这样的:

RewriteEngine On 
RewriteRule article/(.*)\.html articles.php?view=$1 [L] 
+0

大家好,非常感谢。我一直在寻找答案,没有找到正确的解释。这些建议有很大帮助。太多的用户使用简单的.htaccess。旧的文章HTML很丑,但工作原理,我不想使用PHP编写文章内容。什么是一个好的编辑器(自动化?),当我准备好这样做时,它可以清理丑陋的html? – KSB

0

如果您还没有PHP开发的任何现有的框架,在安全问题上的帮助,你可能会考虑的东西比甚至使用PHP来限制访问简单。阅读有关.htaccess文件,以及如何创建受保护的目录,以便在其中放置所有受限制的文章。然后,您可以设置用户帐户,并要求用户在阅读受限制的文章之前进行身份验证。

下面是如何设置的.htaccess用户授权/认证教程:

http://www.javascriptkit.com/howto/htaccess3.shtml

+0

谢谢,但太多的.htaccess维护。不过,我会看看howto。 – KSB

0

你有几个基本的选择:

  • 的代码添加到每个网页。你可能会自动化,所以它没有听起来那么糟糕。它实在不应该只是一个单一的包含。

  • 找出如何让您的网络服务器软件(例如,apache)进行身份验证检查。取决于你的检查有多复杂,一个mod_rewrite外部映射程序可能能够做到。除此之外,现有的认证模块,或写一个相当简单的垫片并不困难(如果你知道C)

  • 通过PHP提供所有页面加载。不幸的是,这可能会破坏现有的网址。您将想要查看的页面作为参数或路径的一部分(取决于服务器配置),然后检查脚本内部,并最终在检查通过时发送页面。

+0

谢谢!我喜欢mod_rewrite的建议。 – KSB

0

最简单的方法很可能是将所有的aricle文件的网站根目录外,然后用PHP来接他们,如果允许客户端看到它。

例如:

<?php 
if (isset($_GET['id'])) 
{ 
    $articleDir = "/var/articles/"; 

    // Assuming a "?id=1" query string is used to pass a numberic ID of 
    // an article. (Like: example.com/showArticle.php?id=1) 
    $articleID = (int)$_GET['id']; 
    $articleFile = "article_{$articleID}.html"; 

    // Look through your SQL database to see if the article is restricted. 
    // I'll leave the codeing to that up to you though. 
    if (!$isRestricted || $isLoggedIn) 
    { 
     $path = $articleDir . $articleFile; 
     if (file_exists($path)) 
     { 
      include $path; 
     } 
     else 
     { 
      echo "The requested article does not exist."; 
     } 
    } 
    else 
    { 
     echo "You have to be logged in to see this article."; 
    } 
} 
else 
{ 
    echo "No article ID was passed. Did you perhaps follow a bad link?"; 
} 
?> 

请注意,如果你想保留旧的链接活着,你可以使用Apache的mod_rewrite重写传入的请求,并传输给你的PHP文件。

编辑

如果你是新的mod_rewrite的和/或正则表达式这可能会帮助:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^article_(\d+)\.html$ fetchArticle.php?id=$1 [L] 
</IfModule> 

击溃任何链接,如example.com/article_123.htmlexample.com/fetchArticle.php?id=123无需客户端注意到它。

与丹格罗斯曼所做的相似,但是这个只取数字。

+0

是的,是的。正是我在找什么。 – KSB