我正在尝试学习如何在.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
答案 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
部分放在您的问题中。