我有我的本地站點的以下目錄結構。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]
我的目標是跳過規則,如果任何文件或目錄存在。 如何爲此寫入RewriteCond
和RewriteRule
?
[編輯]
我發現了這個問題。這是因爲我爲我的網站添加的虛擬主機。我有下面的代碼行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
有什麼問題和衝突。
哪裏是你的htaccess的文件? –
您確定'images/logo.png'對Apache可見嗎?如果不是,Apache會將其視爲不存在。如果您刪除了您的RewriteRule,您的主機是否可以提供'mydomain.com/images/logo.png'? –
打開重寫日誌http://stackoverflow.com/questions/9632852/how-to-debug-apache-mod-rewrite –