我正在学习如何在.htaccess文件中重写URL。我读过一些教程,但尽管如此,我还是像在示例代码中写的那样,什么都没有发生!我在想我在这里做错了什么?当我尝试下面的代码时,我得到了404码。
RewriteEngine On
RewriteRule /byggnader/1/ /?p=byggnad&id=1
这只是一个测试,我想知道/byggnader/
是否必须是一个现有文件,还是仅仅是URL中的一个名称。我用的是页面控制器的设计。因此,URL /?p=byggnad&id=1
将在PSelectedBuilding.php
文件中打开index.php
文件。
我精确地提出了一些反馈,以便能够继续下去。
编辑:由于尽管有下面的帮助,它仍然无法工作,所以我还从处理请求的index.php文件中添加了代码。也许这能给出原因!?
<?php
session_start();
// Allow only access to pagecontrollers through frontcontroller
$indexIsVisited = TRUE;
require_once('config.php');
// pagecontrol
$page = isset($_GET['p']) ? $_GET['p'] : 'start';
switch($page) {
case 'start': require_once('PIndex.php'); break;
case 'karta': require_once('PMap.php'); break;
case 'byggnader': require_once('PBuildings.php'); break;
case 'tips': require_once('PTips.php'); break;
case 'visa-byggnad': require_once('PHandleSessions.php'); break;
case 'byggnad': require_once('PSelectedBuilding.php'); break;
case 'visa': require_once('PSelectedBuilding.php'); break;
case 'visa2': require_once('PHandleSessions.php'); break;
default: require_once('PIndex.php'); break;
}
require_once("CreatePage.php"); // Call file that creates the page
?>
编辑2:
这很好,但当我对其中一些页面使用请求时,情况就不是这样了:
RewriteEngine On
RewriteRule bilder-byggnader-kopenhamn /?p=byggnader
RewriteRule karta-byggnader-kopenhamn /?p=karta
RewriteRule start /?p=start
RewriteRule tips /?p=tips
发布于 2014-05-02 15:04:44
从您的规则中删除前面的斜杠。.htaccess
是每个目录指令,Apache从RewriteRule
URI模式中剥离当前目录路径(从而导致斜杠)。
RewriteEngine On
RewriteRule ^byggnader/1/?$ /?p=byggnad&id=1 [L]
发布于 2014-05-02 23:53:37
试试这个:
RewriteEngine On
RewriteCond %{QUERY_STRING} p=(\w+)&id=(\d+)
RewriteRule ^index.php /%1/%2? [R=301, L]
RewriteCond根据您的意愿对查询字符串进行处理,提取两个变量,您可以在重写规则指令中重用这些变量来构建重定向目标。最后一个问号告诉Apache不要重新追加现有的QS。R=301说重定向是永久的,L表示这是最后要处理的规则。
您可能必须使用index.php
部分,因为您从来没有在您的问题中添加REQUEST_URI
部分。
https://stackoverflow.com/questions/23438221
复制相似问题