感謝任何可以花點時間看看這個的人。
最近我在我的網站上創建了一個新的“子域”部分,在這個新檔案夾中我包含了一個 Joomla CMS 安裝,url 如下所示:http : //www.example.com/subdomain/
在這個檔案夾中,我添加了一個 htaccess 檔案。
## No directory listings
# Redirect non-www to www:
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
當我嘗試訪問http://example.com/subdomain/anytrailingstring 時,它并沒有像我預期的那樣將我重定向到http://www.example.com/subdomain/anytrailingstring,而是重定向到http://www。 example.com/anytrailingstring省略了 /subdomain/,這當然是一個不存在的頁面,因此是 404。
這是個問題。
除了這個之外,我在根 .htacces 檔案中沒有任何指令:
DirectoryIndex index.php
Options FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
有人可以看到為什么子域 htaccess 沒有正確重定向嗎?我錯過了什么?
我根本不擅長 htaccess,如果有人能幫助我,我將不勝感激。謝謝!
uj5u.com熱心網友回復:
RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
您需要使用REQUEST_URI服務器變數而不是反向參考 ( $1)。RewriteRule 模式匹配的 URL 路徑(第一個引數)是相對于當前目錄的,因此不包括父子目錄(即/subdomain在您的示例中)。
改為這樣做:
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
您需要清除瀏覽器快取,因為錯誤的(301 - 永久)重定向將被瀏覽器快取。使用 302(臨時)重定向進行測驗以避免潛在的快取問題。
但是,有幾個問題:
- 你為什么不使用HTTPS?(您正在重定向到父
.htaccess檔案中的HTTPS - 但這現在被子目錄中的 mod_rewrite 指令覆寫。) - 為什么不將其包含在父
.htaccess檔案中?
更新:所以,考慮到以上幾點......如果你想將此規則移動到.htaccess根目錄中的父檔案,那么它就像這樣:
DirectoryIndex index.php
Options FollowSymLinks
RewriteEngine on
# Redirect non-www to www (and HTTPS)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Redirect HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
指令的順序是確保最多只有 1 個重定向(假設您沒有實作 HSTS)。
您不必要地復制了RewriteEngine指令(所以我洗掉了第二個實體)。
RewriteBase未使用該指令。
不需要 HTTP 到 HTTPS 規則中的捕獲子組。IE。^比^(.*)$在這種情況下更好。
在旁邊:。
...我的網站中的一個新部分“子域”,在這個新檔案夾中,我包含了一個 Joomla CMS 安裝,網址如下所示:
http://www.example.com/subdomain/
這是一個子目錄,而不是“子域”。
這是一個“子域”:
http://subdomain.example.com/
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/334784.html
標籤:正则表达式 阿帕奇 .htaccess 改写 url重写
