.htaccess 在重定向时从url中删除脚本名称

.htaccess 在重定向时从url中删除脚本名称,.htaccess,perl,mod-rewrite,mojolicious,.htaccess,Perl,Mod Rewrite,Mojolicious,我正在共享主机帐户上以CGI模式(Apache web服务器)运行一个简单的Mojolicious::Lite应用程序。它工作得很好,但我想不出一件事。我希望用户得到重定向到主页时,请求的路线不存在。下面的代码确实如此,但在浏览器的地址栏中有我的脚本名,这是我不想要的 我的路线如下所示: get '/' => sub { ... } => 'index'; get '/about' => 'about'; any '*' => sub { my $self =

我正在共享主机帐户上以CGI模式(Apache web服务器)运行一个简单的Mojolicious::Lite应用程序。它工作得很好,但我想不出一件事。我希望用户得到重定向到主页时,请求的路线不存在。下面的代码确实如此,但在浏览器的地址栏中有我的脚本名,这是我不想要的

我的路线如下所示:

get '/' => sub { ... } => 'index';

get '/about' => 'about';

any '*' => sub {
    my $self = shift;
    $self->redirect_to('/');
};
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]
我的
.htaccess
如下所示:

get '/' => sub { ... } => 'index';

get '/about' => 'about';

any '*' => sub {
    my $self = shift;
    $self->redirect_to('/');
};
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/
在第三种情况下

为什么会发生这种情况?我觉得
任何“*”
路线要么需要做其他事情,要么我需要更多的重写规则,我还没弄明白

我确实尝试添加了
errordocument404https://example.ru/
在.htaccess中(尝试了开头和结尾)

我还尝试了在重写库之前执行以下操作,但没有任何效果

RewriteCond %{REQUEST_URI}  "^/$"
RewriteRule . script.pl [L]

编辑:刚在手机浏览器上试用过,看到它是如何被重定向到的,然后自动转到

您是否尝试过
$self->redirect_\u to'https://example.com/');我不认为这与浏览器或mod_重写有任何关系。我认为M::L知道它是在CGI模式下运行的,并且它知道CGI脚本是
/script.pl
,所以当您要求重定向到M::L站点的根(
/
)时,它知道它可以作为
/script.pl/
(或者只是
/script.pl
)访问。也许有一种方法可以将其配置为其他方式?Re“我确实尝试添加了
errordocument404https://example.ru/
“,没用,因为您没有返回404。您的问题似乎由回答,其中包括许多解决方案。@simbabque此应用程序非常小,加载速度也一样快(一样慢)作为WordPress网站的主页,我在同一个帐户(同一台服务器)上运行。我真的没有运行的非CGI Mojolicous应用程序可与之相比。pingdom.com说它比59%的测试站点(在圣何塞测试)的速度快,但这可能不是一个严重的指标:-)你是否尝试过
$self->重定向到(https://example.com/');我不认为这与浏览器或mod_重写有任何关系。我认为M::L知道它是在CGI模式下运行的,并且它知道CGI脚本是
/script.pl
,所以当您要求重定向到M::L站点的根(
/
)时,它知道它可以作为
/script.pl/
(或者只是
/script.pl
)访问。也许有一种方法可以将其配置为其他方式?Re“我确实尝试添加了
errordocument404https://example.ru/
“,没用,因为您没有返回404。您的问题似乎由回答,其中包括许多解决方案。@simbabque此应用程序非常小,加载速度也一样快(一样慢)作为WordPress网站的主页,我在同一个帐户(同一台服务器)上运行。我真的没有运行的非CGI Mojolicous应用程序可与之相比。pingdom.com说,它比59%的测试站点(在圣何塞测试)要快,但这可能不是一个重要的指标:-)