在重定向上从url中删除脚本名称

时间:2017-10-08 23:23:27

标签: .htaccess perl mod-rewrite mojolicious

我在共享主机帐户上以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

0 个答案:

没有答案