2013-12-15 61 views
2

我有我的本地站點的以下目錄結構。Apache RewriteCond和RewriteRule跳過現有的文件和目錄

mysite 
|_ css 
|_ images 
    |_ logo.png 
|_ js 
|_ app 
    |_ index.php 
|_ .htaccess 

我想要的Apache URL重寫重定向到http://mysite.dev/app/index.php爲不存在的目錄。 例如,http://mysite.dev/en/home將被改寫成http://mysite.dev/app/index.php

我在.htaccess文件試過這種重寫規則:

Options -Indexes 
DirectoryIndex index.php index.html index.htm 

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^app/index.php [L] 
</IfModule> 

但它被重寫所有現有的目錄和沒有存在的目錄。 也就是說,當我瀏覽http://mysite.dev/mysite/images/logo.png,它改寫爲http://mysite.dev/mysite/app/index.php

我添加上述兩種RewriteCond線的線條,但沒有奏效。

RewriteRule ^(images|css|js) - [NC,L] 

我的目標是跳過規則,如果任何文件或目錄存在。 如何爲此寫入RewriteCondRewriteRule

[編輯]
我發現了這個問題。這是因爲我爲我的網站添加的虛擬主機。我有下面的代碼行httpd-vhost.conf

<VirtualHost mysite.dev> 
    DocumentRoot "C:/xampp/htdocs/mysite" 
    ServerName mysite.dev 
    ServerAlias mysite.dev 
    <Directory "C:/xampp/htdocs/mysite"> 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

當我瀏覽http://mysite.dev/images/logo.png,該RewriteCond工作不正常
但是當我刪除的虛擬主機和我瀏覽http://localhost/mysite/images/logo.png,它工作正常,我看到了圖像正確。

我不確定虛擬主機和RewriteCond有什麼問題和衝突。

+0

哪裏是你的htaccess的文件? –

+1

您確定'images/logo.png'對Apache可見嗎?如果不是,Apache會將其視爲不存在。如果您刪除了您的RewriteRule,您的主機是否可以提供'mydomain.com/images/logo.png'? –

+0

打開重寫日誌http://stackoverflow.com/questions/9632852/how-to-debug-apache-mod-rewrite –

回答

0

在虛擬主機的指令,你需要有一個AllowOverride directive

<VirtualHost mysite.dev> 
    DocumentRoot "C:/xampp/htdocs/mysite" 
    ServerName mysite.dev 
    ServerAlias mysite.dev 
    <Directory "C:/xampp/htdocs/mysite"> 
     AllowOverride FileInfo 

     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 
相關問題