2016-08-15 10 views
14

.htaccessファイルを使用してサブフォルダ内でリライトを実行する必要があります。サブディレクトリのリライト.htaccess

<IfModule mod_rewrite.c> 
    Options -Indexes 
    RewriteEngine On 
    RewriteBase /subfolder/ 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME}\.php -f 
    RewriteRule ^chapter/([a-z0-9]+)/?$ chapter.php?urlkey=$1 [L,NC,QSA] 
</IfModule> 

:私は次のコードで.htaccessファイルを持っているサブフォルダで

domain.com/subfolder/chapter/name 

:それはに書き換える必要がある

domain.com/subfolder/chapter.php?urlkey=name 

:現在のURLは次のようにフォームを持っていますModrewriteは有効になっていますが、何らかの理由でURLにアクセスしたときに何かの理由で

domain.com/subfolder/chapter/name 

これは、次のエラーが返されます。

Notice: Undefined index: urlkey 
+0

/subfolder /を含む親フォルダにhtaccessファイルがありますか? – olegsv

+0

親フォルダにhtaccessファイルがありません。 – Nijn

+0

通知のエラーを完全に投稿できますか?ファイルと行番号が必要です。もしそうなら、そのファイルを投稿してください:) – JayIsTooCommon

答えて

7

subfolder/.htaccessでこのコードを持っている:mod_rewriteを実行し、ファイルのApacheサーバの一致の拡張機能を作る

Options -MultiViews 
RewriteEngine On 
RewriteBase /subfolder/ 

RewriteRule ^chapter/([\w-]+)/?$ chapter.php?urlkey=$1 [L,NC,QSA] 

オプションMultiViewshttp://httpd.apache.org/docs/2.4/content-negotiation.htmlを参照)Apache's content negotiation moduleで使用されています。したがって、/fileがURLの場合、Apacheは/file.htmlを提供します。

はまた、それがサブフォルダで、これは

Options -Indexes 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^chapter/([a-z0-9]+)/?$ chapter.php?url=$1 [L,NC,QSA] 

を確認してください、あなたが持っている私

プットのために働くんRewriteBaseを削除する場合は、あなたがchapter.php?...

+0

-MultiViewsを追加すると、404エラーが表示されます。 – Nijn

+0

'-MultiViews'の追加だけではなく、' chapter?php?... 'の代わりに書き換えルールのターゲットを変更しました。 – anubhava

+0

私は章を変更しましたか? chapter.phpに? 404エラーが発生しました:要求されたURL /サブフォルダ/章/名前がこのサーバー上に見つかりませんでした。 – Nijn

1

あなたのエラーがhtaccessのルールとは関係ありません。

注意:あなたは、配列内に存在しないキーで配列にアクセスしようとすると、未定義のインデックス

が起こります。

Undefined Index通知の典型的な例は、以下のサンプルコードを確認することです。

$data = array('foo' => '42', 'bar'); 
echo $data['spinach']; 
echo $data[1]; 

spinach1両方がトリガさせる、配列には存在しません。

解決策は、インデックスにアクセスする前にインデックスまたはオフセットが存在することを確認することです。これは、プログラムのバグを修正して、それらのインデックスが期待どおりに存在することを保証する必要があることを意味します。

$data = array('foo' => '42', 'bar'); 
if (array_key_exists('spinach', $data)) { 
    echo $data['spinach']; 
} 
else { 
    echo 'No key spinach in array'; 
} 

をあなたのようなコードがある場合:

<?php echo $_POST['message']; ?> 
<form method="post" action=""> 
    <input type="text" name="message"> 
    ... 

このページが最初にロードされると、その後$_POST['message']が設定されることはありませんか、それはあなたがarray_key_existsissetを使用してインデックスが存在するかどうかをテストする必要があることを意味するかもしれません上記のエラーが発生します。フォームが提出され、このコードが実行されたときにのみ、配列インデックスが2回目に存在します。あなたがこのために一般的にチェックしてください。

if ($_POST) .. // if the $_POST array is not empty 
// or 
if ($_SERVER['REQUEST_METHOD'] == 'POST') .. // page was requested with POST 

$ _POST、$ _GETや$ _SESSIONでの作業時には、上記の通知が頻繁に表示されます。 $ _POSTと$ _GETの場合は、インデックスを使用する前にインデックスが存在するかどうかをチェックするだけです。 $ _SESSIONについては、session_start()でセッションを開始し、インデックスも存在することを確認する必要があります。

+0

チャプターの名前は、すべてのチャプターごとに異なります。これは違うべきではありませんか?あなたはコードを使って同じエラーを受け取ります:注意:未定義のインデックス:/sites/domain.com/www/subfolder/chapter.phpの4行目のurlkey。 – Nijn

+0

@Nijn編集した答えをチェックしてください。 – error2007s

+1

ええと、あなたが言っていることを理解していて、urlkeyが見つからないというのは間違いです。しかし、urlが完全に書かれているときには動作しますが、htaccessを使って書き換えられたときには動作しません。したがって、htaccessファイルにエラーがなければなりません。 – Nijn

1

に書き換えることができますchapter?...に書き換える必要はありませんchapter?の代わりにchapter.php?を追加します。

+0

RewriteBaseを削除しても何も変わりません。 'Undefined index:urlkey'エラー – Nijn

+0

このインスタンスの' RewriteBase'指示文の存在は完全にオプションです。 – MrWhite

関連する問題