从URL中删除公共但允许“出版物”

时间:2014-01-30 19:51:19

标签: php .htaccess laravel laravel-4

我知道这个问题已被问了一百万次,但请耐心等待。我在本地服务器的基本目录中使用.htaccess文件:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteRule ^(.*)$ /public/$1 [L]
</IfModule>

这很有效,但只有一个问题。如果我在第一个URL参数中添加了'public',它会给我一个404.

所以,如果我有www.test.dev/publications,那404就是我,因为它的名字中有'公共'。我已经彻底测试过以确保它是一个HTACCESS问题而且肯定是。如果我将路线命名为www.test.dev/publi,则效果正常,与www.test.dev/publi-cations相同。

有没有人有任何想法允许使用.htaccess文件在URL中发布出版物?

谢谢!

编辑:我想我应该让你知道,这不是从URL中删除公众的正确方法,但我的公司拒绝更改主机,我无权修改网站根目录。

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

3 个答案:

答案 0 :(得分:0)

.htaccess中尝试此操作,它适用于http://blog.dev/publications

中的localhost
<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 :(得分:0)

要删除网址的/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>

答案 2 :(得分:0)

尝试此规则:

RewriteEngine On
RewriteRule ^((?!public/).*)$ /public/$1 [L,NC]

更新:建议/public/.htaccess

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]