我获得了3个静态页面,例如
proposal.test.com/seo
proposal.test.com/ppc
proposal.test.com/design
我检查了服务器中的那些目录,并且没有关于其索引的动态,所有普通的htm文件。
给我的指示是,隐藏那些与数据库中的随机网址不匹配的网址。意思是
如果用户输入了proposal.test.com/seo,则该用户不应显示该页面 输入类似的例如proposal.test.com/seo/a13sdfa和a13sdfa匹配数据库中的一个键,这是唯一一次显示proposal.test.com/seo页面
那我怎么用PHP做这个呢?因为所有3个目录都由纯静态页面组成..
我已经完成了密钥的创建,我只想知道如何通过附加给定的随机密钥并检查它是否存在于数据库中来隐藏这些页面。
答案 0 :(得分:2)
由于页面从未被视为PHP,因此无法使用PHP阻止访问。
您可以通过配置Web服务器来阻止访问,例如使用.htaccess
文件。
如果您以正常方式阻止访问,可以使用PHP来允许在特定条件下访问文件..
答案 1 :(得分:1)
您应该使用mod_rewrite
(如果是Apache网络服务器)并将/a13sdfa
重写为?key=a13sdfa
之类的内容。此外,您应该在所有静态文件中包含一些PHP代码,以检查密钥的有效性。
答案 2 :(得分:1)
这个怎么样:将静态文件移到公共文件夹之外,这样就无法直接访问它们;将所有请求重定向到php文件(您可以使用带有apache的重写引擎),它将在数据库中查找访问的url / key并返回相应文件的file_get_contents
。
以下是.htaccess文件的示例:
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ /index.php
这样做如下:如果磁盘上不存在所请求的文件(作为文件或目录),它将重定向到/index.php
。你应该有逻辑来呈现你想要的页面。
如果你不知道服务器将把slug放在哪个变量中,只需从index.php里面做一个print_r($_SERVER)
来找到它。
答案 3 :(得分:0)
有两种方法可以解决这个问题。
1)(我的首选)使用.htaccess只显示与.htaccess中的正则表达式相匹配的页面。
2)在PHP(你的实际问题)'从URL获取slug,查询数据库,如果你得到一个结果显示它。否则,从php发送404标头。
假设有以下内容:您有一个启用了mod_rewrite的Apache网络服务器(如果您不确定,请查看php信息)。您的虚拟主机允许覆盖(AllowOveride All)。
.htacces
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+) index.php?check=$1 [QSA,L,t]
如果服务器上存在文件或目录,它将显示该页面。所以它会显示seo,设计等。否则它会重定向到index.php并将其slug作为名为$ check的参数。使用此变量,查询数据库,检查结果并重定向到所需的页面。