如何使用虚拟主机和.htaccess 文件摆脱 URI 中的“index.php”?

如何使用虚拟主机和.htaccess 文件摆脱 URI 中的“index.php”?

我在本地主机上使用虚拟主机来运行我的 Laravel 4 项目,这样就无需再输入'本地主机/L4/公共/index.php/路线'。Laravel 还使用.htaccess在其公共目录中创建一个文件。虚拟主机.htaccess文件如下:

虚拟主机文件

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/L4/public

    ServerName www.L4.dev

    Alias /billing /var/www/L5/public

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/L4/public/>
        AllowOverride All
    </Directory>
</VirtualHost>

Laravel 4 项目的 .htaccess 文件

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

    RewriteEngine On

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

假设 Laravel 4 项目有一条路线‘路线1’。 这虚拟主机文件和.htaccess文件让我可以访问我的 Laravel 4 项目的‘路线1’使用“www.L4.dev/index.php/route1”

我在虚拟主机文件中添加了以下内容以摆脱'索引.php' 来自上面给出的地址:

<Directory /var/www/L4/public/>
    AllowOverride All
</Directory>

这工作正常,现在我可以访问我的'路线1' 路线Laravel 4 项目使用 'www.L4.dev/route1“”。

但请注意我也在使用别名‘/计费’在我的虚拟主机文件访问另一个项目L5(laravel 5 项目)。

现在假设Laravel 5 项目有一条路线'路线2' 要访问此路线,我必须输入www.L4.dev/billing/index.php/route2

我也想摆脱'索引.php' 也从这里,但不知道该怎么做???

我确信我必须对此做点什么虚拟主机文件和.htaccess文件在'公共' L5 目录但不知道做什么以及如何做?

笔记:Laravel 5 项目没有虚拟主机文件,只是使用 Alias 来访问它。

‘L5/Public/’ 目录中的 .htacess 文件

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

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

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

有人可以在这方面帮助我吗?

答案1

像这样更改您的主 .htaccess 并删除其他的:

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

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Billing
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^/billing/(.*) /billing/index.php/$1 [L]

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

或者你可以使用这个技巧:

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

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(/billing/|)(.*) $1index.php$2 [L]
</IfModule>

相关内容