2011-06-10 96 views
2

我正在尋找使用.htaccess重定向到一個頁面或另一個基於目錄中是否存在文件。.htaccess如果文件存在重定向

基本上我需要所有遊客到index.php來將其發送到home.php頁面如果splash.php 不一樣,如果splash.php 目錄中存在存在或splash.php頁,到目前爲止我有這個...

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} index.php 
RewriteCond %{DOCUMENT_ROOT}/splash.php -f 
RewriteCond %{SCRIPT_FILENAME} !splash.php 
RewriteRule ^.*$ /splash.php [L] 

這將發送旅客mysite.com/splash.php如果,如果我有專門爲mysite.com/index.php我的網址只存在,它不只是如果工作使用mysite.com網址。

我瞭解我的代碼的前3行,但不是!splash.php -f位(我從其他一些重定向代碼中找到了它)。

如果splash.php不存在,我該如何重定向到home.php?

乾杯!

回答

3

試試這個規則。它應該在mysite.com/index.php,mysite.com/或mysite.com上工作

RewriteEngine on 
RewriteCond %{DOCUMENT_ROOT}/splash.php -f 
RewriteCond %{SCRIPT_FILENAME} !splash.php 
RewriteRule ^(index\.php|/|)$ /splash.php [L] 
+0

在你的正則表達式中有一個額外的'|'嗎? – 2011-06-10 13:11:48

+0

這是一個夢想的伴侶,謝謝!只要我設置DirectoryIndex = home.php – Mark 2011-06-10 14:33:15

+1

@Salman - extra |是故意的(也匹配一個空字符串) – qbert220 2011-06-13 07:54:29

1

你需要把它分成多個塊,所以試試這個(如果存在,就去splash.php,不管它們是否在文件名中有index.php,然後如果splash不是存在去home.php):

RewriteEngine on 

RewriteCond %{DOCUMENT_ROOT}/splash.php -f 
RewriteCond %{SCRIPT_FILENAME} !splash.php 
RewriteRule ^.*$ /splash.php [L] 

RewriteCond %{DOCUMENT_ROOT}/splash.php !-f 
RewriteRule ^.*$ /home.php [L] 
+0

這看起來確實應該起作用,現在我得到它了。但它只是拋出了500內部錯誤 – Mark 2011-06-10 14:33:04

+0

啊,可能是缺少一個RewriteBase或其他這樣的設置。 – Femi 2011-06-10 14:52:32

0

隊友,我添加了一個快速的.htaccess和它的作品完美的我。我不確定你的配置有什麼不同。爲了避免混淆,這裏的阿帕奇(2)虛擬主機,我使用:

<VirtualHost *:80> 
    DocumentRoot "/usr/local/zend/apache2/htdocs/test-setup" 
    ServerName test-setup 
    ErrorLog /var/log/apache2/lps-version-one_test-setup_error_log 
    LogLevel warn 
    CustomLog /var/log/apache2/lps-version-one_test-setup_access_log combined 
    <Directory "/usr/local/zend/apache2/htdocs/test-setup"> 
     DirectoryIndex index.php 
     AllowOverride All 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

當我在目錄中有兩個文件,我重定向到splash.php(即使該文件的名稱在URL不會改變 - 內部我重定向到splash.php)。當我重命名splash.php(或刪除它)我只看到index.php。當我放回去時,重定向正常工作。當我特別將index.php放在url中時,兩個文件都可用,我被重定向到splash.php。

FWIW,要記住約mod_rewrite的最好的事情之一就是:

儘管萬噸的實例和文檔, mod_rewrite的是巫術。該死的冷靜 伏都教,但依然伏都教。 - Brian Moore [email protected]

相關問題