這是我的問題:如何使mod_rewrite在沒有指定路徑的子目錄中正確重定向?
比方說,我有一個網站,www.example.com
。我有一個應用程序subdir
位於該域的文檔根目錄的子目錄:
/home/example/public_html/subdir/
subdir
包含此.htaccess
:
# Redirect trailing slash if not a directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /subdir/$1 [L,R=301]
它的工作原理。如果我去http://www.example.com/subdir/not_a_directory/(顯然假設not_a_directory
不是目錄),我會重定向到http://www.example.com/subdir/not_a_directory,這正是我想要的。
但我不想在重寫規則中指定subdir
或.htaccess
中的任何位置。我希望能夠在不破壞任何內容的情況下更改應用程序的路徑。我嘗試以下...
# Redirect trailing slash if not a directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]
,但我得到重定向到:http://www.example.com/home/example/public_html/subdir/not_a_directory
我有點明白,爲什麼出現這種情況(用於重寫規則的相對路徑返回一個文件系統路徑,而絕對或根絕對路徑返回一個URL),但我無法弄清楚如何實現我在找的東西。
難道沒有辦法讓RewriteRule
中的捕獲組包含subdir
部分路徑嗎?我也嘗試設置RewriteBase /
,但它似乎沒有改變任何東西。
重寫規則使我困惑很多,所以任何幫助將不勝感激。謝謝!
是的,謝謝!我注意到'REQUEST_URI'包含'subdir',但我沒有意識到我可以在RewriteCond中使用捕獲組(或者說,忘記了我可以)。還有兩個問題:1.我想我可以用'RewriteRule ^'替換'RewriteRule/$',因爲第二個RewriteCond已經只能重寫以斜線結尾的URL了,這是對的嗎? 2.爲什麼NE(noescape)標誌? – benface
是的'RewriteRule ^'在這裏完全沒問題,'NE'是爲了避免URL中的某些特殊字符被編碼。 – anubhava
有沒有我們不想要'NE'的情況? – benface