mod_rewrite斜线snafu

时间:2012-08-29 09:01:06

标签: php apache .htaccess mod-rewrite

所以我知道这个问题已被问过其他20次和20种不同的方式,但在我的所有研究之后,我仍然无法弄清楚这一点。我的设置工作得很好,直到我输入带有斜杠的URL,然后我得到404错误。例如,当我输入URL mydomain.com/first并按Enter键时,它可以正常工作。当我输入mydomain.com/first/并点击回车时,它也可以正常工作。但是,如果我输入mydomain.com/second,它会将我发送到mydomain.com/first/second并抛出404错误。

这是我的整个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模板:

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

我认为,因为斜杠是可选的而不是后引用的一部分,所以在页面加载后斜杠将不在URL中,但在上面的示例中,它显然不是。任何建议都将非常感激。谢谢

3 个答案:

答案 0 :(得分:1)

这应该是什么:

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

你需要放在index.php的前面。

否则Apache将在当前目录中查找index.php文件。

答案 1 :(得分:0)

希望这会有所帮助

RewriteRule ^([A-Za-z0-9\_\-]*)/?$ index.php?url=$1 [L] 

答案 2 :(得分:0)

你的mod_rewrite配置没问题,问题出在客户端上。如果当前路径为/foo/first<a href="second"/>将导致/foo/second。如果是/foo/first/,则相同的<a href/>会导致/foo/first/second