我正在尝试使用PHP创建网址并使用 if语句中的路径( $ path )。
在工作中,我们使用ASP Classic并拥有一些允许我们执行以下操作的文件:
<%
if path = "checkout" then
<!--#include file="ViewCheckout.asp"-->
elseif path = "billing" then
<!--#include file="ViewBilling.asp"-->
end if
%>
我们可以在我们网站的任何地方使用' if path =“checkout”'。奇怪的是' http://myworksite.com/checkout/ '是结帐页面的网址,但我们的服务器上没有名为“< strong>结帐“......以上只是'如果path =”blah“'包含在我们的'start.asp'中的几个列表(包含页面的基本模板。)
我见过像ParseURL.asp这样的文件和其他文件(在工作中)以某种方式创建这些URL并允许我们在全局使用它们。我正在尝试学习如何在PHP中完成(在工作中,我们运行Windows Server,我有一个Linux盒子)。
我要做的是为各自的网页创建以下网址:
我想再次创建这些网址 WITHOUT 为路径创建目录。
我已阅读 * http_build_url * 和 * parse_url * ,但我很难确定以上述方式创建网址的方式。< / p>
我发现的http_build_url教程显示了这一点:
<?php
echo http_build_url("http://user@www.example.com/pub/index.php?a=b#files",
array(
"scheme" => "ftp",
"host" => "ftp.example.com",
"path" => "files/current/",
"query" => "a=c"
),
HTTP_URL_STRIP_AUTH | HTTP_URL_JOIN_PATH | HTTP_URL_JOIN_QUERY | HTTP_URL_STRIP_FRAGMENT
);
?>
问题是,我无法弄清楚这只是输出 ftp://ftp.example.com/pub/files/current/?a=b&a=c 作为文字或者如果它是一种创建有效URL的方式...(这显然是一个FTP地址...) - PHP.net
注意: 在工作中,我们还可以使用 if path =“contact”来包含以下某些代码段:
<%
if path = "contact" or path = "chat" or path = "checkout" then
<div id="communication-nav">
<ul>
<li>Some link 1</li>
<li>Some link 2</li>
<li>Some link 3</li>
</ul>
</div>
end if
%>
如果有人能给我一些关于如何使用PHP重新创建它的指示,我将非常感激!
我在研究正确的功能吗?我是否需要使用某种URL重写功能?
答案 0 :(得分:1)
尝试使用此内容在index / document_root文件夹中创建.htaccess文件
RewriteEngine on
# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
# RewriteBase /
# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
# -- only if not a file
RewriteCond %{REQUEST_FILENAME} !-f
# -- only if not a directory
RewriteCond %{REQUEST_FILENAME} !-d
# -- never for favicon
RewriteCond %{REQUEST_URI} !=/favicon.ico
# -- rewrite if all above remains true
# -- e.g. /perma-links/this-is-it becomes index.php?q=perma-links/this-is-it
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
对于不允许或不可用覆盖重写模块的兼容性设置,请用以下内容包装代码块:
<IfModule mod_rewrite.c>
#rewrite rules
</IfModule>
答案 1 :(得分:1)
如果安装了mod_rewrite,请尝试以下.htaccess文件。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/([^/]*) $1.php
答案 2 :(得分:0)
经过大量研究,我想出了如何以我需要的方式做到这一点......首先,我插入了一些使index.php文件“动态”的代码。我把它放在每个页面的“内容”显示的位置......
<?
$p = $_GET['page'];
$page = "pages/".$p.".php";
if(file_exists($page))
include($page);
elseif($p=="")
include 'pages/home.php';
elseif($p=="about")
include 'pages/about.php';
elseif($p=="contact")
include 'pages/contact.php';
elseif($p=="disclaimer")
include 'pages/disclaimer.php';
else
include '404.html';
?>
这样做包括我想要显示的相应“内容”文件,具体取决于某人试图查看的页面。我将不同的页面存储在我网站的/pages/
目录中。您可以将其更改为您想要的任何内容。
接下来,(如果您正在运行APACHE服务器并且运行mod_rewrite模块(大多数托管服务和APACHE框都激活了此模块),我们要打开(或创建,如果您的站点目录中不存在).htaccess文件这可以通过记事本或Dreamweaver完成。只需将文件命名为“.htaccess”,并确保不将其保存为“.txt”。
.htaccess文件需要包含以下内容才能实现我所需要的...
RewriteEngine on
RewriteRule ^(.*)/$ index.php?page=$1
^
标志着字符串的开头,(.*)
基本上指明了可以在这里的任何内容,/
是/ about /
(还有更多内容) ),$
标志着我相信的字符串的结尾。
请注意 $ 之后的空格...在空格之后,您说明当前的URL是什么(这是我生成的答案开头的代码块)...在我的情况是 index.php?page = about 。 $ 1 不是PHP变量,它代表第一个变量的值约(或者您正在查看的页面)
现在我强烈建议在阅读之前查找“mod_rewrite”教程。这对我来说是新的,非常令人困惑。该视频对我很有帮助(http://www.practicalecommerce.com/articles/394-Video-Tutorial-Eliminating-Dynamic-URLs-with-Mod-Rewrite)。
感谢大家的帮助!一如既往,非常感谢! :)
注意一旦我配置了这个,我的CSS就完全坏了,我的图片都没出现。我玩了hrefs并拨打了它。显然这些错误的“目录”会影响hrefs,就像它们存在一样?无论如何,如果你遇到这个,不要惊慌:)