2016-08-15 5 views
14

Ich muss eine Umschreibung in einem Unterordner mit der .htaccess-Datei durchführen. Die aktuelle URL hat eine Form wie:Rewriterule .htaccess in Unterordner

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

muss es neu geschrieben werden:

domain.com/subfolder/chapter/name 

Im Unterordner ich eine .htaccess-Datei mit dem folgenden Code haben:

<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> 

Modrewrite ist aktiviert, aber aus irgendeinem Grund, wenn ich zur URL gehe

domain.com/subfolder/chapter/name 
domain.com/subfolder/chapter/name 

Es gibt die folgenden Fehler:

Notice: Undefined index: urlkey 
+0

Haben Sie eine htaccess-Datei im übergeordneten Ordner, der/subfolder /? – olegsv

+0

Ich habe keine htaccess-Datei im übergeordneten Ordner. – Nijn

+0

Könnten Sie den vollständigen Benachrichtigungsfehler posten? Es sollte eine Datei- und Zeilennummer haben. Wenn ja, poste diese Datei bitte :) – JayIsTooCommon

Antwort

7

Haben Sie diesen Code in subfolder/.htaccess:

Options -MultiViews 
RewriteEngine On 
RewriteBase /subfolder/ 

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

Option MultiViews (siehe http://httpd.apache.org/docs/2.4/content-negotiation.html) von Apache's content negotiation module verwendet wird, die vormod_rewrite und macht Apache-Server Spiel Erweiterungen von Dateien ausgeführt wird. Wenn also die URL /file ist, wird Apache /file.html liefern.

Auch gibt es keine Notwendigkeit, chapter?... zu umschreiben Sie chapter.php?...

+0

Das Hinzufügen der -MultiViews gibt mir einen 404 Fehler. – Nijn

+0

Es ist nicht nur das Hinzufügen von '-MultiViews' Ich habe auch das Ziel der Rewrite-Regel in' chapter.php? ... 'geändert anstatt nur' chapter? ... ' – anubhava

+0

Ich habe das Kapitel geändert? nach kapitel.php? aber ich bekomme einen Fehler 404: Die angeforderte URL/Unterordner/Kapitel/Name wurde auf diesem Server nicht gefunden. – Nijn

1

Ihr Fehler ist .htaccess Regeln nicht verwendet.

Hinweis: Nicht definiert Index

passiert, wenn Sie versuchen, mit einem Schlüssel eines Arrays zuzugreifen, die in dem Array nicht existiert.

Ein typisches Beispiel für einen Undefined Index Hinweis wäre der folgende Beispielcode.

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

Sowohl spinach und 1 existieren nicht in der Matrix, wodurch ein ausgelöst werden.

Die Lösung besteht darin, sicherzustellen, dass der Index oder Offset vor dem Zugriff auf diesen Index vorhanden ist. Dies kann bedeuten, dass Sie einen Fehler in Ihrem Programm beheben müssen, um sicherzustellen, dass diese Indizes vorhanden sind, wenn Sie dies erwarten. Oder es kann bedeuten, dass Sie testen müssen, ob die Indizes sind mit array_key_exists oder isset:

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

Wenn Sie Code haben wie:

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

dann $_POST['message'] wird nicht eingestellt werden, wenn diese Seite zuerst geladen und Sie werden den obigen Fehler erhalten. Nur wenn das Formular übergeben wird und dieser Code ein zweites Mal ausgeführt wird, existiert der Array-Index. Sie überprüfen typisch für diese mit:

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

Die Hinweise oben oft erscheinen, wenn sie mit $ _POST, $ _GET oder $ _SESSION arbeiten. Für $ _POST und $ _GET müssen Sie nur prüfen, ob der Index vorhanden ist oder nicht, bevor Sie sie verwenden. Für $ _SESSION müssen Sie sicherstellen, dass die Sitzung mit session_start() gestartet wurde und dass der Index ebenfalls existiert.

+0

Der Name des Kapitels ist für alle Kapitel unterschiedlich. Sollte das nicht anders sein? Mit Ihrem Code erhalte ich denselben Fehler: Hinweis: Undefinierter Index: URL-Schlüssel in /sites/domain.com/www/subfolder/chapter.php in Zeile 4. – Nijn

+0

@Nijn Überprüfen Sie meine bearbeitete Antwort. – error2007s

+1

Hmm, ich verstehe, was Sie sagen, und dass der URL-Schlüssel nicht gefunden wird, ist definitiv der Fehler. Es funktioniert jedoch, wenn die URL vollständig geschrieben wird, aber nicht, wenn sie mit htaccess neu geschrieben wird. Daher muss in der htaccess-Datei ein Fehler auftreten. – Nijn

1

umschreiben kann, wenn RewriteBase Entfernen es für mich

dieses in Unterordner nicht funktioniert überprüfen Sie bitte

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] 

und Sie haben hinzufügen chapter.php? anstelle von chapter?.

+0

Das Entfernen der RewriteBase ändert nichts für mich. Es gibt mir den Fehler "Undefined index: urlkey" – Nijn

+0

Das Vorhandensein der 'RewriteBase' Direktive in diesem Fall ist völlig optional. – MrWhite