重写.htaccess中的URL只会导致404错误

时间:2014-05-02 23:02:10

标签: php regex apache .htaccess mod-rewrite

我正在尝试学习如何在.htaccess文件中重写URL。我已经阅读了一些教程,但尽管我在示例代码中编写,但对我来说没有任何反应!我想知道我在这里做错了什么?我在尝试下面的代码时得到了404代码。

RewriteEngine On
RewriteRule /byggnader/1/ /?p=byggnad&id=1

这只是一个测试,我想知道/byggnader/必须是现有文件还是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

2 个答案:

答案 0 :(得分:1)

从规则中删除前导斜杠。 .htaccess是每个目录指令,Apache从RewriteRule URI模式中剥离当前目录路径(从而导致斜杠)。

RewriteEngine On
RewriteRule ^byggnader/1/?$ /?p=byggnad&id=1 [L]

答案 1 :(得分:1)

试试这个:

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部分放在您的问题中。