对于特定的 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> 块。 (它实际上并没有做任何事情。)