2016-08-15 69 views
14

我需要使用.htaccess文件在子文件夾中執行重寫。當前URL具有格式如:在子文件夾中重寫子文件.htaccess

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

它需要改寫爲:

domain.com/subfolder/chapter/name 

在子文件夾中我有下面的代碼.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> 

Modrewrite啓用,但由於某種原因,當我去的網址

domain.com/subfolder/chapter/name 

它返回以下錯誤:

Notice: Undefined index: urlkey 
+0

你有一個父文件夾中包含/子文件夾/ htaccess文件嗎? – olegsv

+0

我在父文件夾中沒有htaccess文件。 – Nijn

+0

您能否發佈完整通知錯誤?它應該有一個文件和行號。如果是這樣,請發佈該文件:) – JayIsTooCommon

回答

7

有這樣的代碼在subfolder/.htaccess

Options -MultiViews 
RewriteEngine On 
RewriteBase /subfolder/ 

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

選項MultiViews(見http://httpd.apache.org/docs/2.4/content-negotiation.html)所使用的Apache's content negotiation modulemod_rewrite之前運行,使文件的Apache服務器匹配擴展。所以如果/file是URL,那麼Apache將服務於/file.html

也沒有必要重寫chapter?...可以改寫爲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不數組中存在,造成被觸發。

解決方案是確保索引或偏移量在訪問該索引之前存在。這可能意味着您需要修復程序中的錯誤,以確保這些索引在您期望的時候確實存在。或者,它可能意味着你需要測試的指標是否存在使用array_key_existsisset

$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']將不會被設置時,該頁面第一次加載你會得到上面的錯誤。只有在提交表單並且第二次運行此代碼時,數組索引才存在。通常,您可以檢查此有:以上

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

拆卸時RewriteBase它確實爲我工作

把這個子文件夾請

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] 

,你有添加chapter.php?而不是chapter?

+0

刪除RewriteBase不會爲我改變任何東西。它給了我'未定義的索引:urlkey'錯誤 – Nijn

+0

在這個實例中存在'RewriteBase'指令是完全可選的。 – MrWhite

相關問題