Php 正在从URL中删除Public,但允许“发布”

Php 正在从URL中删除Public,但允许“发布”,php,.htaccess,laravel,laravel-4,Php,.htaccess,Laravel,Laravel 4,我知道这个问题已经被问过无数次了,但请耐心听我说。我在本地服务器的基本目录中使用一个.htaccess文件: <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ /public/$1 [L] </IfModule> 在.htaccess中尝试此功能,它与http://blog.dev/publications 从我的本地主机 要删除URL的/public/部分,您不必将/public

我知道这个问题已经被问过无数次了,但请耐心听我说。我在本地服务器的基本目录中使用一个.htaccess文件:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteRule ^(.*)$ /public/$1 [L]
</IfModule>
在.htaccess中尝试此功能,它与http://blog.dev/publications 从我的本地主机

要删除URL的/public/部分,您不必将/public/添加到.htaccess,您需要将VirtualHost DocumentRoot直接指向该文件夹,例如:

<VirtualHost *:80>
    ServerName yourdomain.com
    DocumentRoot /var/www/yourdomain.com/public

    <Directory /var/www/yourdomain.com>
        Options Indexes Includes FollowSymLinks MultiViews
        AllowOverride AuthConfig FileInfo
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
然后在您的.htaccess中有类似的内容:

<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>
试试这个规则:

RewriteEngine On
RewriteRule ^((?!public/).*)$ /public/$1 [L,NC]
更新:suggered/public/.htaccess:

<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>

无论你遇到什么样的错误,它都会起作用http://blog.dev/publications 从我的本地主机博客是我的文件夹名。我只是得到一个基本的404找不到,我使用的是Route::get'publications/reports','PublicationsController@reports'; 还是给了我404。如果我删除.htaccess文件并执行www.test.dev/public/publications/reports操作,它将正常工作,我可以在我的PC上本地编辑虚拟主机以指向公用文件夹,但在生产服务器上我不能,因此我必须找到一个带有一些.htaccess文件的解决方案。什么类型的主机不允许您访问以更改文档根目录?大多数虚拟主机都会提供一个面板来实现这一点,这是Parallels面板中的一个示例:只有当我修改虚拟主机使基本目录为“公共”时,这才有效。这是我理解的正确方式,但我的生产服务器主机不允许修改服务器上的基本目录。然后,你必须找到一个丑陋的heck,IMO。Nah仍然不起作用,获取404。谢谢你的回答!您现在得到的是哪个URL的404?www.test.dev/publications/reports,如果我将路由重命名为www.test.dev/publi/reports或www.test.dev/publi-cations/reports,它就可以正常工作。我需要能够在URL中使用出版物,因为这是我办公室的规定不幸的是,出版物有目录吗?如果是,那么其中是否有.htaccess?这个.htaccess中有更多的规则吗?没有发布是控制器,报告是方法,除了根文件夹中的一个.htaccess之外,没有其他的.htaccess,我现在正在使用它从我的URL中删除“public”
RewriteEngine On
RewriteRule ^((?!public/).*)$ /public/$1 [L,NC]
Options -MultiViews
RewriteEngine On
RewriteBase /public/

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

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