所以我知道这个问题已被问过其他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中,但在上面的示例中,它显然不是。任何建议都将非常感激。谢谢
答案 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
。