链接不会导致mod_rewrite的正确页面

时间:2013-03-15 10:25:37

标签: .htaccess mod-rewrite

我刚刚开始尝试重写我的所有网站网址,但我不明白这一点。在我的htaccess文件中,我有以下代码:

RewriteEngine On
RewriteBase /
RewriteRule ^tjanster/([^/.]+)/?$ tjanster.php?page=$1 [L]

例如,当我点击链接时

<a href="tjanster/rackochskapbyggnation/tjanster.php?page=design">Design</a> 

它应该转到mypage.com/tjanster/design,但它不会转到

mypage.com/tjanster/rackochskapbyggnation/tjanster.php?page=design

但是,如果我直接在网址中写mypage.com/tjanster/design,就会转到页面。

3 个答案:

答案 0 :(得分:1)

不,这不是这样的,但恰恰相反:

<a href="tjanster/design">Design</a>

会导致tjanster/rackochskapbyggnation/tjanster.php?page=design

mod_rewrite的一个想法是处理这些不存在的URI请求并将它们转换为现有的URI请求,使您能够美化您拥有的URL或隐藏某些特定的URL。

答案 1 :(得分:0)

你必须在PHP中进行实验才能弄清楚,但是当你直接访问时,你也可以将PHP重定向到有效的URL。

该代码可能如下所示:

<?php
if (preg_match('~^/tjanster/rackochskapbyggnation/tjanster\/.php~i', $_SERVER['REQUEST_URI'])) {
    if (isset($_GET['page'])) {
        header('Location: /tjanster/' . $_GET['page']);
    } else {
        header('Location: /tjanster/');
    }
    exit;
}

此代码查看REQUEST_URI变量,以查看请求的URL是否看起来像是直接访问脚本,如果是,则重定向到漂亮的页面结构。您还必须保留重写规则。

答案 2 :(得分:0)

试试这个:

RewriteRule tjanster.php?page =(。*)tjanster / $ 1 [L]

第一个参数是输入uri,第二个是如何重写它$ 1指的是里面的数据()