2012-08-29 73 views
2

所以我知道這個問題已被問及20其他時間和20種不同的方式,但經過我所有的研究,我仍然無法弄清楚這一點。我的設置很好,直到我輸入一個帶有斜線的URL,然後出現404錯誤。例如,當我輸入URL mydomain.com/first並按回車鍵時,它可以正常工作。當我輸入mydomain.com/first/並回車時,它也可以正常工作。但是,如果我輸入​​它會將我發送到mydomain.com/first/second並引發404錯誤。mod_rewrite斜線snafu

這是我整個的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

你的htaccess的最後一行:你真的有'/ IfModule>'嗎?或者這只是一個複製/粘貼錯誤? – zessx

+0

我看不到如何去'mydomain.com/secondPage'可能導致獲得服務'/ firstPage/secondPage' –

+0

@samsamX是的,這是一個錯字。感謝您指出了這一點。 –

回答

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文件。

+0

謝謝你的回答,但這似乎並不奏效。它實際上是這樣,當我去mydomain.com/first時,我得到了一個404.它有助於知道我的.htaccess文件與我的index.php文件在同一個文件夾中? –

+0

他們在哪個文件夾? index.php和.htaccess都應直接位於htdocs文件夾中,以便此解決方案可以工作 – JochenJung

+0

它們位於直接位於htdocs內的我的項目子文件夾中。例如:htdocs> myProject> index.php –

0

希望這將有助於

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

你的mod_rewrite配置是OK的,問題是在客戶端上。如果當前路徑是/foo/first,<a href="second"/>將導致/foo/second。如果是/foo/first/,則相同的<a href/>將導致/foo/first/second