2014-05-02 63 views
1

我正试图学习如何在.htaccess文件中重写URL。我已经阅读了一些教程,但尽管如我在示例代码中所写,没有任何事情发生在我身上!我想知道我在这里做错了什么?当我尝试下面的代码时,我得到一个404代码。在.htaccess中重写URL只会导致404错误

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

这只是一个测试,我不知道是否/byggnader/必须在URL中现有的文件或只是一个名字。我正在使用页面控制器设计。因此,URL /?p=byggnad&id=1将在index.php文件内打开PSelectedBuilding.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 
+0

你想要达到什么目的? – elbuild

+0

@elbuild为了得到像WordPress –

+0

那样更干净的URL是的,我猜对了。但是我问你要用这个规则来达到什么目的(因为它是不正确的,但是没有理解它的目的,它很难帮助你) – elbuild

回答

1

从您的规则斜线。 .htaccess是每个目录指令,并且Apache从RewriteRule URI模式剥离当前目录路径(因此引导斜杠)。

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

谢谢,但这不行!当我在域名后输入/ byggnader/1 /时,我只是得到这个错误:在这个服务器上没有找到请求的URL/byggnad/1 /。 –

+0

你确定.htaccess已启用吗? – anubhava

+0

是的我已经问过支持 –

1

试试这个:

RewriteEngine On 
RewriteCond %{QUERY_STRING} p=(\w+)&id=(\d+) 
RewriteRule ^index.php /%1/%2? [R=301, L] 

的的RewriteCond mathches查询字符串(按你的愿望)提取两个变量,您可以重用建立自己的重定向目标在重写规则指令。最后的问号告诉Apache不要收回现有的QS。 R = 301表示重定向是永久性的,L表示这是要处理的最后一条规则。

您可能必须使用index.php部件,因为您从未将REQUEST_URI部件放在您的问题中。

+0

嗨,谢谢你的回答!我如何“玩我的index.php”? –

+0

我的意思是将index.php部分修改为您的场景(您的URL的前一部分)。 – elbuild