簡體   English   中英

htaccess轉發到子文件夾,但隱藏子文件夾名稱

[英]htaccess forward to subfolder but hide subfolder name

我在寫一些正則表達式到htaccess文件中時遇到問題。

基本上,我的網站已經設置好,因此index.php和所有其他網站文件不在根(public_html)目錄中,而是位於http://fitnessquiz.co.uk/fitnessquiz.co.uk/中。

最初,我在public_html文件夾中嘗試了以下操作:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^fitnessquiz.co.uk$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.fitnessquiz.co.uk$
RewriteCond %{REQUEST_URI} !fitnessquiz.co.uk/
RewriteRule (.*) /fitnessquiz.co.uk/$1 [L]

可以正確導航到我的主頁並正確顯示網址,但是當我單擊任何鏈接時,會收到“未指定輸入文件”消息。 因此,我嘗試替換為:

RewriteCond %{REQUEST_URI} !^/fitnessquiz.co.uk/

RewriteRule ^(。*)$ /fitnessquiz.co.uk/$1 [L,R = 301]

之后,該網站可以正常運行,但每個網址如下所示:

http://fitnessquiz.co.uk/fitnessquiz.co.uk/someotherfolder/etc.php

我已經嘗試過在這里其他地方列出的各種htaccess regex解決方案,但似乎都沒有用,我如何完成這兩項工作,即為每個URL重定向到/fitnessquiz.co.uk,但隱藏重復的URL名稱/文件夾。 我在共享服務器上,因此沒有權限直接更改任何服務器/ apache設置。

根據先前帖子中的裸體回答 ,您可以嘗試:

RewriteCond %{THE_REQUEST} ^GET\ /fitnessquiz.co.uk/
RewriteCond %{HTTP_HOST} ^(www\.)?fitnessquiz.co.uk$
RewriteRule ^fitnessquiz.co.uk/(.*) /$1 [L,R=301]

RewriteCond %{HTTP_HOST} ^(www\.)?fitnessquiz.co.uk$
RewriteRule !^fitnessquiz.co.uk/ fitnessquiz.co.uk%{REQUEST_URI} [L]

這套規則在非常相似的情況下對我有用。 我采用了相同的方法(如果調用該文件夾,則重定向至該文件夾,然后在重新寫入后隱藏該文件夾),但我從來沒有自己下定單。 因此,我一直看到該頁面也未發現錯誤。 下面是我嘗試解釋的動作,供我自己學習,也希望其他人也可以。

RewriteCond %{THE_REQUEST} ^GET\ /fitnessquiz.co.uk/

問一個問題,THE_REQUEST是否包含您需要隱藏的子文件夾?

RewriteCond %{HTTP_HOST} ^(www\.)?fitnessquiz.co.uk$

檢查請求是否針對正確的主機。

RewriteRule ^fitnessquiz.co.uk/(.*) /$1 [L,R=301]

將URL重寫為不帶子文件夾的URL,然后在重定向的瀏覽器中調用新鏈接。 注意:

  • L:最后一步。 停止處理其他規則
  • R = 301:重寫后,將瀏覽器重定向到新URL。

當頁面被重定向時,它沒有子文件夾,因此第一個RewriteRule被跳過。 接着

RewriteCond %{HTTP_HOST} ^(www\.)?fitnessquiz.co.uk$

檢查是否呼叫正確的主機。 接着

RewriteRule !^fitnessquiz.co.uk/ fitnessquiz.co.uk%{REQUEST_URI} [L]

重寫沒有子文件夾的url,以使用正確的子文件夾而不重定向頁面,同時在瀏覽器中隱藏實際的子文件夾。 再次注意:

  • L:最后一步。 停止處理其他規則

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM