的地址欄中顯示的規則,我有以下重寫規則:除非URI與media/
在這種情況下,將改寫URI來project/media/*
開始重寫瀏覽器
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase/
# Route all URLs to dispatch.php.
RewriteCond %{REQUEST_URI} !media/
RewriteRule ^(.*)$ dispatch.php [L]
#Route requests to /media/* to /project/media/*
RewriteRule ^media/(.*)?$ project/media/$1 [L]
</IfModule>
一切改寫爲dispatch.php
。一切工作正常,如果我導航到example.com/media/css/style.css
它所服務的樣式表。如果我導航到example.com/media/css/
則發送403 Forbidden錯誤。完善!
然而,如果我導航到example.com/media/css
(缺少尾隨「/」)然後在位置欄中的URL改寫爲example.com/project/media/css
和所述請求由dispatch.php
處理。我如何阻止這種行爲發生?我希望能夠通過dispatch.php
來處理,但不會將projects/
添加到網址中。
已解決:問題是由於mod_dir重定向了沒有結尾斜槓的URL。這導致出現在磁盤上的位置用於重定向,這意味着子文件夾(項目)被附加到URI。我用最後的.htaccess如下:
Options +FollowSymLinks +MultiViews -Indexes
Options -Indexes
<IfModule mod_dir.c>
DirectorySlash Off
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase/
#Add trailing slashes
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ $1/ [R=301,L]
#Route requests to /media/* to /project/media/*
RewriteRule ^media(/.*)$ project/media$1 [L]
# Route all URLs to dispatch.php.
RewriteCond %{REQUEST_URI} !^media/(.*)
RewriteRule ^(.*)$ dispatch.php [L]
</IfModule>
新的.htaccess不會像以前一樣還有:
- 禁用mod_dir。
- 通過使用RewriteRule將尾部斜線添加到URI 。
無需創建一個新的問題: http://stackoverflow.com/questions/2010249/redirecting-media-to-project-media-and-everything-else-to-dispatch-php – 2010-01-06 10:05:35
我會確保我不會再這樣做,但我認爲目標完全不同於需要它自己的問題。 – 2010-01-06 14:31:06