2013-10-24 89 views
-2

我已經嘗試了許多代碼,但他們都沒有工作。如果文件不包含在PHP中,有什麼方法可以用htaccess重定向。重定向如果文件不包括

的htaccess至今:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/(.*).html index.php?lang=$1&menu=$2 [QSA,L] 

因此,當我寫任何/en/introduction.html將rewrited。 但是,當有人想要得到我的一個php代碼(例如/menu.php)應該被重定向到/index.php

在PHP中,我可以用開始的PHP代碼來解決它,但是我減慢了系統速度,這就是爲什麼我需要htaccess。

+1

此規則將只重定向'.html'文件。 – anubhava

+0

「RewriteRule ^(。*)/(。*)。html」表示:如果URL以.html結尾,請重寫。你也可以爲.php做同樣的事情。通過更改html到(html | php) –

+0

「我已經嘗試了很多代碼」一起通過組合在一起「停止猜測,開始閱讀和學習...」 – feeela

回答

3

試試這個:

的.htaccess

<IfModule mod_rewrite.c> 

    Options +FollowSymLinks 
    RewriteEngine on 

    RewriteBase/

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-l 

    RewriteRule .* index.php [L] 

</IfModule> 

這將完成時,如果一個文件服務器存在,例如/en/introduction.html將會加載該文件。這適用於文件夾和鏈接。然後

所有其他請求被轉發到index.php

現在,內index.php可以使用$_SERVER['REQUEST_URI']和解析URL結構,你想要做什麼。


至於禁止以menu.php直接訪問...

此行添加到您的的index.php<?php標籤:

define('_IN_SCRIPT_)', true); 

現在,這行添加到菜單.php<?php標籤

if (!defined('_IN_SCRIPT_') || !_IN_SCRIPT_) { 
    exit('Direct access not allowed.'); 
} 

現在,當您在index.php中包含menu.php時,腳本將起作用。如果有人直接在瀏覽器中訪問menu.php,他們會得到錯誤。

+0

謝謝,簡單地使用'$ inscript'來定義更好嗎? – androbin

+1

[define()](http://uk3.php.net/define)函數在運行時定義一個命名常量。對於像這樣的任務,我更喜歡常量而不是變量。如果必須使用變量,然後將其加載到函數中,那麼在函數中使用它之前,必須使用'global $ inscript'。使用常量(可通過全部腳本全局訪問)更容易。 – Latheesan

0

所以它不能用htaccess只用PHP解決。 謝謝!

相關問題