在 Apache 2.4 上,我有一個 .htaccess(在子檔案夾中),它將該檔案夾內的無斜杠請求重寫為適當的索引檔案:
DirectorySlash Off
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_FILENAME}/index.html -f
RewriteRule (.*) $1/index.html [L]
這完全適用于無斜線版本。現在我想將斜線版本外部重定向到無斜線版本。我嘗試添加以下行:
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} /$
RewriteRule ^(.*)/ $1 [R=302,L]
但是這不起作用:發出重定向,但它不會轉到無斜杠 URL,而是轉到注入了系統特定部分的 URL。
因此,對于示例 URL http://example.com/path/to/dir/,重定向的 URL 看起來像這樣http://example.com/fs9e/username/sub/public/path/to/dir,而不僅僅是http://example.com/path/to/dir.
我怎樣才能解決這個問題?非常感謝您的任何指點!
PS:實際情況稍微復雜一些,因為我在根 .htacces 中進行了子域到檔案夾的重寫,但我認為這與這里無關。
uj5u.com熱心網友回復:
RewriteRule ^(.*)/ $1 [R=302,L]
您/在替換字串(第二個引數)上缺少斜杠前綴 ( ) - 以使替換與根相對。或者更確切地說,/subfolder/(因為此.htaccess檔案位于子檔案夾中)。由于這是一個相對替換字串(不是以斜杠或方案 主機名開頭),目錄前綴*1(我假設是/fs9e/username/sub/public/path/)被添加回來(默認情況下*2),導致格式錯誤的重定向。(這適用于內部重寫,但不適用于外部重定向。)
它應該是這樣的:
RewriteRule ^(.*)/$ /subfolder/$1 [R=302,L]
請注意,您還缺少pattern$上的字串結尾錨 ( ) 。(這也否定了前面檢查以斜杠結尾的條件的需要。)RewriteRule REQUEST_URI
另請注意,此“重定向”應在較早的“重寫”之前進行。
*1目錄前綴是 .htaccess 檔案所在位置的絕對檔案系統路徑。
*2另一種方法是設定RewriteBase /subfolder- 但這會影響所有相對替換。您還可以使用環境變數將特定前綴僅應用于某些規則。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456597.html
