花費大量時間尋找解決方案,但我幾乎不知道htaccess和重定向。如何根據URL模式動態重定向特定的子目錄?
我的問題是:如何重定向URL的特定部分,並忽略其他人?
例如http://www.example.com/foo
重定向到http://www.example.com/
和http://www.example.com/foo/bar
保持原樣。
在此先感謝!
花費大量時間尋找解決方案,但我幾乎不知道htaccess和重定向。如何根據URL模式動態重定向特定的子目錄?
我的問題是:如何重定向URL的特定部分,並忽略其他人?
例如http://www.example.com/foo
重定向到http://www.example.com/
和http://www.example.com/foo/bar
保持原樣。
在此先感謝!
與以下
RewriteRule ^foo$ http://www.%{HTTP_HOST}/ [R=301,L]
它的聲音,因爲如果你需要某種廣義解的嘗試。如果是這種情況,你可以使用mod_rewrite
來實現這一點,前提是你的apache已經安裝並啓用了模塊,或者你可以自己訪問apache。
這比簡單的重定向功能強大得多,但在腳下拍攝自己也更容易。
它適用於基於正則表達式重寫URL的條件和規則。
要只(並準確)重定向/ foo的你會定義:
RewriteRule ^/foo$ http://www.example.com
這將保持低於富不變什麼,甚至/foo/index.html。
重定向以下FOO什麼,不包含子目錄欄或其他一些子目錄它會是什麼樣子:
RewriteCond %{REQUEST_URI} !^/foo/(bar|whatever|subdirectories)/
RewriteRule ^/foo(.*) http://www.example.com/$1 [R=301,L]
的RewriteCond
檢查指定的目錄不能在REQUEST_URI
中找到並應用通用任何低於foo的重定向,如果是這樣的話; $1
包含括號內的正則表達式捕獲的內容(.*)
。
該規則中的尾部參數[R=301,L]
使其具有與給定的HTTP返回代碼301一樣的重定向,並使其成爲最後一個(L
)重定向規則 - 否則應用更多規則可能會創建一些不同的結果。
驚訝地在這裏看到這麼多的不正確的答案。您只需要使用精確的正則表達式在這裏選擇/foo
並附帶可選的尾部斜槓。
您可以在DOCUMENT_ROOT/.htaccess
文件中使用這樣的規則:
RedirectMatch 302 ^/foo/?$/