【发布时间】:2018-02-05 15:09:49
【问题描述】:
这是我迄今为止关于 Stack Overflow 的第一个问题。
我提供了这么多信息,因为我觉得我从一开始就走错了路,所以可能有更好的解决方案/方法,只使用 PHP。
信息
我的本地 XAMPP 服务器上有一个网站,可以使用http://localhost/project/ 访问它。
我的项目结构如下:
|-- htdocs/
|---- project/
|------ css/
|------ img/
|------ js/
|------ less/
|------ files/
|------ src/
|-------- _config/
|---------- config.php
|-------- _template/
|---------- header.php
|---------- footer.php
|-------- pages/
|---------- portfolio/
|------------ showcase1.php
|------------ showcase2.php
|---------- company.php
|---------- contacts.php
|---------- portfolio.php
|------ .htaccess
|------ index.php
我需要什么
网址应如下所示:
- http://localhost/project/ - 根文件夹、索引、主页
- http://localhost/project/company - 显示位于http://localhost/project/src/pages/company.php 的网页
- http://localhost/project/portfolio/showcase1 - 显示位于 http://localhost/project/src/pages/portfolio/showcase1.php 的网页
我有什么
我已成功满足上述“我需要什么”列表中的第 1 项和第 2 项要求,但是我无法完成第 3 项工作。
.htaccess:
RewriteEngine on
RewriteBase /
RewriteRule ^(\w+)$ /project/src/pages/$1.php [L,NC]
PHP:
每个 somepage.php 文件包含:
<?php require_once($_SERVER['DOCUMENT_ROOT']."/project/src/_template/header.php");?>
header.php:
<?php require_once($_SERVER['DOCUMENT_ROOT'].'/project/src/_config/config.php'); ?>
<!doctype html>
<head>
...
<base href="<?php echo SER_NAME; ?>">
...
</head>
<body>
...
<nav id="menu">
<a href="company">Company</a>
<a href="portfolio">Portfolio</a>
<a href="portfolio/showcase1">Schowcase1</a>
<a href="portfolio/showcase2">Schowcase2</a>
<a href="contacts">Contacts</a>
</nav>
...
config.php:
<?php
$basedir = '/project/';
define('DOC_ROOT', $_SERVER['DOCUMENT_ROOT'] . $basedir);
define('SER_NAME', "//" . $_SERVER['SERVER_NAME'] . $basedir);
define('TEMPLATE', DOC_ROOT . 'src/_template');
define('CSS_PATH', SER_NAME . 'css');
define('JS_PATH', SER_NAME . 'js');
define('IMG_PATH', SER_NAME . 'img');
define('FILE_PATH', SER_NAME . 'files');
?>
问题
- 如何从上面的“我需要的东西”列表中获得第 3 项?我的情况需要什么 .htaccess 规则?
- 如果我走错了路,哪种解决方案/方法可能更好?
【问题讨论】:
标签: php apache .htaccess url url-rewriting