我在 Symfony 中創建了一個網站,在 Ionic 中創建了移動版本。
現在所有 URL 都被重定向到/public/index.php.
我想添加另一個 URL 重寫.htaccess以將所有重定向www.example.com/mobile/*到根檔案夾中的 ionic 應用程式/mobile/index.html。
我已經嘗試將其添加到root_folder/mobile/.htaccess
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/mobile/.*$
RewriteRule ^mobile/(.*)$ /mobile/index.html [R=301,NC,L]
我的 root_folder.htaccess是:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /public/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.ch$
RewriteCond %{REQUEST_URI} !\.(gif|jpe?g|png|svg|webp|mp4|css|js|txt)$
RewriteRule ^(.*)?$ public/index.php [L]
<If "%{REQUEST_URI} =~ m#/mobile/?#i">
RewriteCond %{REQUEST_URI} !^/mobile/.*$
RewriteRule ^mobile/(.*)$ /mobile/index.html [R=301,NC,L]
</If>
uj5u.com熱心網友回復:
RewriteCond %{REQUEST_URI} !^/mobile/.*$ RewriteRule ^mobile/(.*)$ /mobile/index.html [R=301,NC,L]
該RewriteRule 模式與相對于包含該.htaccess檔案的目錄的 URL 路徑匹配。因此,在檔案內部時,上述RewriteRule內容將永遠不會匹配/mobile/.htaccess。同樣,條件永遠不會成功,因為如果.htaccess觸發了,那么/mobile/URL 路徑中必須已經存在。
這也是外部 301 重定向,而不是內部重寫。它需要是內部重寫(就像public/index.php根中的重寫一樣)。
但是,可能您還希望靜態資產被忽略并直接提供服務,因此您需要檔案(以及可選的目錄)的例外,就像您在根.htaccess檔案中所做的那樣(重寫時public/index.php)。
在檔案中嘗試以下/mobile/.htaccess操作:
# /mobile/.htaccess
RewriteEngine On
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]
您不需要/mobile在任何指令中指定,因為RewriteRule 模式與相對 URL 路徑(如上所述)匹配,并且替換字串(默認情況下)相對于包含.htaccess檔案的目錄。
默認情況下,檔案中的 mod_rewrite 指令/mobile/.htaccess完全覆寫父.htaccess檔案中的指令。甚至不處理父.htaccess檔案中的指令。
<If "%{REQUEST_URI} =~ m#/mobile/?#i"> RewriteCond %{REQUEST_URI} !^/mobile/.*$ RewriteRule ^mobile/(.*)$ /mobile/index.html [R=301,NC,L] </If>
<If>您應該在根.htaccess檔案中洗掉此塊。(它實際上并沒有做任何事情。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456036.html
