2

ですから、この質問は他に20回、さまざまな方法で行われていることを私は知っていますが、すべての調査を行った後でも、これを理解できないようです。末尾にスラッシュが付いたURLを入力してから、404エラーが発生するまで、セットアップはうまく機能します。たとえば、URLmydomain.com/firstを入力してEnterキーを押すと、正常に機能します。入力しmydomain.com/first/てEnterキーを押すと、それでも問題なく動作します。しかし、それを入力すると、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から除外されると思いますが、上記の例では明らかにそうではありません。任意のアドバイスをいただければ幸いです。ありがとうございました

4

3 に答える 3

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 ファイルを探します。

于 2012-08-29T10:25:15.133 に答える
0

あなたの mod_rewrite 設定は問題ありません。問題はクライアントにあります。現在のパスが の場合/foo/first<a href="second"/>につながり/foo/secondます。の場合/foo/first/、同じ<a href/>ことが につながり/foo/first/secondます。

于 2012-08-30T07:20:51.253 に答える
0

これが役立つことを願っています

RewriteRule ^([A-Za-z0-9\_\-]*)/?$ index.php?url=$1 [L] 
于 2012-08-30T01:08:53.963 に答える