从Laravel 5 URLS中删除public和index.php的最佳方法

时间:2015-09-17 06:42:30

标签: php apache .htaccess mod-rewrite laravel-5

由于我是laravel的新手,我已经安装了一个新的副本,提供必要的权限并运行应用程序一切都很好。 现在我已经在apache中创建了一个虚拟主机来删除公共,这也正常工作:

<VirtualHost *:80>
ServerName mobileapp

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/mobileapp/public
<Directory "/var/www/html/mobileapp/">
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/mobileapp_error.log
CustomLog ${APACHE_LOG_DIR}/mobileapp_access.log combined

现在,该网站可以通过http://mobileapp/index.php/pages在本地访问,但如果我从url(http://mobileapp/pages)中删除index.php则无法正常工作。 我的.htaccess文件是:

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

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^ index.php [L]           # <----- Tested not working
RewriteRule ^(.*)$ /$1 [L]             # <----- neither this one

我也启用了mode_rewrite。任何人都可以告诉我什么是最好和最简单的方法。

3 个答案:

答案 0 :(得分:2)

尝试此前端控制器规则:

RewriteRule ^index\.php(/|$) - [L,NC]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)/?$ index.php/$1 [L]

答案 1 :(得分:1)

要调试重写,请将以下内容添加到.htaccess

RewriteLog ${APACHE_LOG_DIR}/rewrite.log
RewriteLogLevel 9

然后你可以为你的RewriteRules尝试不同的正则表达式来看看会发生什么。我会尝试以下内容:

RewriteRule ^/index.php(.*)$ http://mobileapp/$1 [L]

请注意,要申请RewriteRule,首先需要满足RewriteCond行。在您的情况下,您的条件是!-d!-f,这可能是您的问题。

答案 2 :(得分:0)

我只需将server.php重命名为index.php即可使用