对于特定的 url 'www.example.com/mobile' 我想 url 重写到另一个特定路径:'root_folder/mobile/index.html'
For specific url 'www.example.com/mobile' I want url rewrite to another specific path: 'root_folder/mobile/index.html'
我在 Symfony 中创建了一个网站,在 Ionic 中创建了移动版本。
现在所有 URL 都重定向到 /public/index.php
。
我想在 .htaccess
中添加另一个 URL 重写以将所有 www.example.com/mobile/*
重定向到根文件夹 /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/
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>
RewriteCond %{REQUEST_URI} !^/mobile/.*$
RewriteRule ^mobile/(.*)$ /mobile/index.html [R=301,NC,L]
RewriteRule
模式 匹配 URL-path 相对于包含 .htaccess
文件的目录。所以,上面的 RewriteRule
在 /mobile/.htaccess
文件中永远不会匹配。同样,条件永远不会成功,因为如果.htaccess
被触发,那么/mobile/
必须已经存在于URL-path.[=33中=]
这也是外部 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-path (如上所述)并且 substitution 字符串(默认情况下)相对于包含 .htaccess
文件的目录。
默认情况下,/mobile/.htaccess
文件中的 mod_rewrite 指令完全覆盖父 .htaccess
文件中的指令。甚至不处理父 .htaccess
文件中的指令。
<If "%{REQUEST_URI} =~ m#/mobile/?#i">
RewriteCond %{REQUEST_URI} !^/mobile/.*$
RewriteRule ^mobile/(.*)$ /mobile/index.html [R=301,NC,L]
</If>
您应该删除根 .htaccess
文件中的这个 <If>
块。 (它实际上并没有做任何事情。)
我在 Symfony 中创建了一个网站,在 Ionic 中创建了移动版本。
现在所有 URL 都重定向到 /public/index.php
。
我想在 .htaccess
中添加另一个 URL 重写以将所有 www.example.com/mobile/*
重定向到根文件夹 /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/
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>
RewriteCond %{REQUEST_URI} !^/mobile/.*$ RewriteRule ^mobile/(.*)$ /mobile/index.html [R=301,NC,L]
RewriteRule
模式 匹配 URL-path 相对于包含 .htaccess
文件的目录。所以,上面的 RewriteRule
在 /mobile/.htaccess
文件中永远不会匹配。同样,条件永远不会成功,因为如果.htaccess
被触发,那么/mobile/
必须已经存在于URL-path.[=33中=]
这也是外部 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-path (如上所述)并且 substitution 字符串(默认情况下)相对于包含 .htaccess
文件的目录。
默认情况下,/mobile/.htaccess
文件中的 mod_rewrite 指令完全覆盖父 .htaccess
文件中的指令。甚至不处理父 .htaccess
文件中的指令。
<If "%{REQUEST_URI} =~ m#/mobile/?#i"> RewriteCond %{REQUEST_URI} !^/mobile/.*$ RewriteRule ^mobile/(.*)$ /mobile/index.html [R=301,NC,L] </If>
您应该删除根 .htaccess
文件中的这个 <If>
块。 (它实际上并没有做任何事情。)