mod_rewrite不更改URL

时间:2012-08-30 09:26:29

标签: php apache .htaccess mod-rewrite

所以我刚开始使用Apache的mod_rewrite模块,而且我遇到了一个我似乎无法解决的问题。我想要的是让用户手动输入URL或链接页面时,地址栏显示干净的URL。现在,当我们输入时,我会获得干净的URL,但是当页面链接到时,查询字符串仍显示在地址栏中。例如:

输入,myDomain.com/first将我的页面放在myDomain.com/index.php?url=first,并在地址栏中显示myDomain.com/first。

但是,当点击像href =" index.php?url = first"这样的链接时。当我希望它显示myDomain.com/first时,地址栏显示myDomain.com/index.php?url=first。

这是我的.htaccess文件,与我的索引文件位于同一文件夹中:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_\-]+)/?$ index.php?url=$1 [NC,L]
</IfModule>

这是我的索引文件:

<?php
define('ROOT_DIR', dirname(__FILE__) . '/'); // Define the root directory for use in includes 
require_once (ROOT_DIR . 'library/bootstrap.php');

$url = strtolower($_GET['url']);

include(ROOT_DIR . 'views/headerView.php');

switch($url)
{
    case "first": include(ROOT_DIR . 'views/firstPageView.php');
        break;
    case "second": include(ROOT_DIR . 'views/secondPageView.php');
        break;
    default: include(ROOT_DIR . 'views/homeView.php');
} 

include 'views/footerView.php';
?>

这是homeView.php:

<p>This is the home page.</p>
<p>To the first page. <a href="index.php?url=first">First Page</a></p>
<p>To the second page. <a href="index.php?url=second">Second Page</a></p>

非常感谢我对链接问题的任何建议或帮助,谢谢你。

2 个答案:

答案 0 :(得分:1)

  

但是,当点击像href =“index.php?url = first”这样的链接时。地址   当我需要时,栏会显示myDomain.com/index.php?url=first   显示myDomain.com/first。

您必须链接到“干净”的网址。记住,你不是在这里重定向。你在改写!这意味着你必须改变这个:

<p>This is the home page.</p>
<p>To the first page. <a href="index.php?url=first">First Page</a></p>
<p>To the second page. <a href="index.php?url=second">Second Page</a></p>

对于这样的事情:

<p>This is the home page.</p>
<p>To the first page. <a href="/url/first">First Page</a></p>
<p>To the second page. <a href="/url/second">Second Page</a></p>

答案 1 :(得分:0)

看看这两行:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

这意味着:如果网址指向真实文件或文件夹,请不要尝试遵守规则。

当您使用myDomain.com/index.php?url=first时,它会指向真实文件:index.php。然后,您的规则将不会被尝试。

必须始终在代码中使用myDomain.com/first之类的干净网址。