沒有結束,我想在使用國防部重寫轉換網頁地址一樣/目錄到/directory/index.html,在一個標準的LAMP託管情況。我所用的地址以斜線結尾。我無法找到處理地址的方法,這些地址不會以斜槓結束。RewriteEngine敘述在.htaccess趕上文件HTML
什麼似乎像它應該工作是:
rewriterule ^(.*)/$ $1/index.html [L] /* addresses ending in/*/
rewriterule ^(.*(?!html))$ $1/index.html [L] /* where the problem is */
但第二行導致500服務器錯誤。如果我加一個字母X到第二行:
rewriterule ^(.*)/$ $1/index.html [L]
rewriterule ^(.*x(?!html))$ $1/index.html [L]
它開始工作,但僅適用於在X結束目錄名。我曾嘗試用許多不同的東西替換x。任何比真實字符更復雜的東西(如[^ x]或。+)都會導致500服務器錯誤。
而且,爲了滿足我自己的好奇心,有誰知道爲什麼添加一個真實的字母會導致服務器錯誤和完美運行規則之間的區別?
[接受的答案]由於甘博我能近似使用的RewriteCond的解決方案:
rewritecond %{REQUEST_URI} !\.[^/]+$ rewriterule (.+) $1/index.html [L]
這工作,但過濾器不僅僅是html的 - 它可以阻止其他頁面。不幸的是,
rewritecond %{REQUEST_URI} !\.html$
導致服務器錯誤:
Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary.
我還是想知道爲什麼:
rewriterule ^(.*(?!html))$ $1/index.html [L]
結果在一個循環。上半部分應該檢查是否不是以.html結尾。自去年下半年以來增加的.html,好像在功能上等同:
while(substr($address,-4)!='html') $address.='html'
很顯然,我失去了一些東西。
如果您可以命名服務器錯誤,它會更有幫助。 – Gumbo 2009-03-03 09:55:42
你沒看過我的編輯筆記嗎?前瞻斷言看起來錯誤的方向。 – Gumbo 2009-03-10 16:25:26