我在共享主机帐户上以CGI模式(Apache Web服务器)运行一个简单的Mojolicious :: Lite应用程序。它运作得很好,但我找不到一件事。我希望用户在请求的路由不存在时被重定向到主页。使用下面的代码,但在浏览器的地址栏中有我的脚本名称,我不想要。
我的路线看起来像这样:
get '/' => sub { ... } => 'index';
get '/about' => 'about';
any '*' => sub {
my $self = shift;
$self->redirect_to('/');
};
我的.htaccess
看起来像这样:
RewriteEngine on
# -- force https --
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [R,L]
# -----------------
RewriteCond %{DOCUMENT_ROOT}/public/%{REQUEST_URI} -f
RewriteRule ^(.*)$ public/$1 [L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ script.pl/$1 [L,PT]
例如(在浏览器中输入 - >在浏览器的地址栏中输入):
https://example.com/ https://example.com/
https://example.com/about https://example.com/about
https://example.com/missing https://example.com/script.pl (while home page is displayed as expected)
我只是希望它在第三种情况下显示https://example.com/
。
为什么会这样?我觉得any '*'
路线需要做其他事情,或者我需要更多重写规则,但我还没有想到。
我确实尝试在.htaccess中添加ErrorDocument 404 https://example.ru/
(尝试开始和结束)。
我也在RewriteBase /
之前尝试过关注,但它没有做任何事情。
RewriteCond %{REQUEST_URI} "^/$"
RewriteRule . script.pl [L]
修改:在移动浏览器上试用了https://example.com/test,看了它如何被重定向到https://example.com/script.pl/test,然后自动转到https://example.com/script.pl