3

我正在尝试在 PHP 中创建 URL 并在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/ ”是结帐页面的 URL,但我们的服务器上没有名为“结帐”的目录……以上只是其中的几个列表' if path = "blah" ' 包括出现在我们的 'start.asp' (包含页面基本模板的文件)中的内容。

我见过像 ParseURL.asp 和其他文件(在工作中)以某种方式创建这些 URL 并允许我们在全球范围内使用它们。我正在尝试了解这是如何在 PHP 中完成的(在工作中,我们运行 Windows Server,我有一个 Linux 机器)。

我想要做的是为他们各自的页面创建以下 URL:

再一次,我想创建这些 URL而不为路径创建目录。

我已经阅读了*http_build_url**parse_url*,但是我很难确定以上述方式创建 URL 的方式。

我发现的 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 重写功能吗?

4

3 回答 3

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>
于 2012-09-02T22:02:56.237 回答
1

如果您安装了 mod_rewrite,请尝试以下 .htaccess 文件。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/([^/]*) $1.php
于 2012-09-02T22:12:03.973 回答
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 变量,它代表第一个变量的值,about(或您正在查看的任何页面)。

现在我强烈建议在深入研究之前先查看“mod_rewrite”教程。这对我来说是新的,而且很混乱。该视频对我很有帮助(http://www.practicalecommerce.com/articles/394-Video-Tutorial-Eliminating-Dynamic-URLs-with-Mod-Rewrite)。

在此感谢大家的帮助!一如既往,非常感谢!:)

注意一旦我完成了这个配置,我的 CSS 就完全损坏了,我的图像都没有出现。我玩弄了hrefs并拨通了它。显然,这些虚假的“目录”会影响 href,就好像它们存在一样?无论如何,如果您遇到这种情况,请不要惊慌:)

于 2012-09-03T05:43:36.213 回答