2017-03-07 62 views
0

我遇到了另一個與.htaccess有關的問題,我無法爲其找到正確的解決方案。我試圖做到的是從一個子目錄同一目錄內重定向到一個特定的HTML文檔時複製/粘貼顯示下方htaccess將子目錄(文件夾)重定向到同一子目錄中的單個頁面

網址,例如: http://example.com/staging/測試/http://example.com/staging/測試/ page.html中

我的(幾乎)工作方法:

Options -Indexes -MultiViews 
RewriteEngine on 

RewriteRule ^test/(.*)$ test/page.html [L] 

此代碼的問題在於它基本上會重定向到正確的page.html,但是如果您想單擊page.html上的任何鏈接,它只是重新導向到page.html,而不是轉到子目錄中的特定鏈接/測試/讓我們說/test/page-2.html

重要:此重定向只會影響子目錄「升級」。所有其他的子目錄(包括root)不會受到影響。

其他信息: 此代碼也是我的.htaccess文件來刪除該目錄的.html擴展名「上演」

RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^(.*)$ $1.html [L] 

目錄「分期」未連接到任何CMS和只包含.html文件。 我在一個共享主機環境(Hostgator/cPanel)。

謝謝。

回答

1

使用下面的規則,你只使用L標誌,但我正在修改它作爲你提到的重定向。

Options -Indexes -MultiViews 
RewriteEngine on 

RewriteRule ^test/$ /staging/test/page.html [R=301,L] 
+0

不幸的是,這給了我一個404頁面。 – Alex

+0

你在哪裏使用規則! –

+0

我在放置在子目錄「test」中的.htaccess文件中使用規則。根目錄中還有另一個.htaccess。但是,子目錄「測試」必須完全獨立於根。 – Alex

0

您只想重定向directoy,但不是其中的文件。規則中的模式表示匹配目錄test/後面跟着任何.*,包括任何文件。

單獨匹配的目錄,該模式必須在test,這是由字符串的結束完成停止anchor

RewriteRule ^test/$ /staging/test/page.html [R,L] 

而不是絕對路徑,你可以保持相對路徑,並添加一個RewriteBase指令

RewriteBase /staging 
RewriteRule ^test/$ test/page.html [R,L] 

如果喲你只想重寫,忽略了R的標誌。

+0

這產生404找不到。我認爲這是因爲目錄「test」沒有index.html。 – Alex

+0

我剛剛查看了其他評論,.htaccess文件在子目錄'test'中? –

+0

謝謝你提出這個問題。 .htaccess文件位於「分段」之前的目錄中。 http://example.com/staging/test(你實際上提供了一個解決方案,讓我隱藏相同設置的.html擴展名) – Alex

相關問題