.htaccess /controller/action 模式调用两次 public/index.php

.htaccess /controller/action pattern calling twice public/index.php

晚上好,

我已经尽力在标题中描述了问题,并会在此处进一步详细说明:

我有一个使用此 URI 模式的应用程序 /controller/action/parameters(即:register/complete/email:token:any_other_parameter)(在我的情况下参数已展开),只要我仅传递 URI 中的控制器(即:/register)它工作正常,我位于 public 文件夹 /public/index 中的索引未被调用两次。

然而,当为控制器/register/complete或/admin/login指定动作时(例如),public/index。php被调用两次。

这是我在应用根目录 covoit/ 和 covoit/public 文件夹中的 .htaccess。

根.htaccess :

RewriteEngine On
RewriteBase /covoitudiant/

RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^%1 [L,NE,R=301]

RewriteRule ^/?([a-zA-Z]+)?/?([a-zA-Z]+)?/?(.*)? public/index.php?controller=&action=&parameters= [L,QSA]

ErrorDocument 404 /covoitudiant/error

/public/.htaccess

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

我不太明白自己解决它的概念,关于为什么从 URI controller/action 或 controller/action/parameters 接收时 index.php 被调用两次.. .

问题已解决。

丢失的文件再次调用我的 Apache 规则,因此,我的控制器被调用了两次。

这是由于路径错误的音频文件丢失。

另外,为了得到一个.htaccess文件,我使用了Apache的虚拟主机,并根据我的迷你框架重新调整了规则。

如果这也能帮助到其他人,下面是结果:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # Handle Authorization Header.
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Handle Trailing Slashes.
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # If not Folder or File.
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^index.php
    RewriteRule ^/?([a-zA-Z]+)?/?([a-zA-Z]+)?/?(.*)? index.php?controller=&action=&parameters= [L,QSA]
</IfModule>

祝你有愉快的一天!