【问题标题】:Rewrite '/it/public/' to '/it/'将 '/it/public/' 重写为 '/it/'
【发布时间】:2014-03-21 04:42:43
【问题描述】:

我到处寻找可以从以下位置重写 url 的 htaccess 规则:

customer.com/it/public/customer.com/it/

我的文件夹结构是这样的:

/customer.com
   .htaccess
    |-- it
        |-- .htaccess
        |-- public
        |   |-- .htaccess

在网站的根目录下,是一个 Codeigniter 应用,在 IT 文件夹内,是一个 Laravel 应用。

这是我当前网站根目录中的 HTACCESS(重写 codeigniter index.php):

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .* index.php/$0 [PT,L]
</IfModule>

这些是我在IT文件夹根目录下的HTACCESS文件中的规则(应该重写laravel公用文件夹):

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^public/
    RewriteRule ^(.*)$ /public/$1 [L]
</IfModule>

这些是公共文件夹中HTACCESS文件中的规则(重写公共文件夹中的index.php):

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

调试部分:

DOCUMENT_ROOT   C:/xampp/htdocs
REQUEST_SCHEME  http
CONTEXT_PREFIX  
CONTEXT_DOCUMENT_ROOT   C:/xampp/htdocs
SERVER_ADMIN    postmaster@localhost
SCRIPT_FILENAME C:/xampp/htdocs/it/public/index.php
REMOTE_PORT 44461
REDIRECT_URL    /it/
GATEWAY_INTERFACE   CGI/1.1
SERVER_PROTOCOL HTTP/1.1
REQUEST_METHOD  GET
QUERY_STRING    
REQUEST_URI /it/
SCRIPT_NAME /it/public/index.php
PHP_SELF    /it/public/index.php
REQUEST_TIME_FLOAT  1395338241.106
REQUEST_TIME    1395338241

【问题讨论】:

    标签: .htaccess laravel


    【解决方案1】:
    RewriteRule ^(.*)$ /public/$1 [L]
    

    此行产生一个绝对替换,因此 mod_rewrite 不会添加回目录前缀(在本例中为“it”)。尝试用以下内容替换该规则:

    RewriteRule ^(.*)$ public/$1 [L] #relative substitution
    

    或者用这个:

    RewriteRule ^(.*)$ /it/public/$1 [L] #absolute substitution including dir prefix
    

    PS:您并不是真的想将“/it/public/”重写为“/it/”,而是相反。

    编辑:另外,删除“重定向尾部斜杠”规则。

    【讨论】:

    • 这确实起到了作用。当我尝试customer.com/it 时,我得到的是 laravel 404 错误页面,而不是 codeigniter 404 页面。我需要在 laravel 中配置路径以允许它在子文件夹中运行吗?
    • 如果 /bootstrap/paths.php 配置正确,它应该可以工作。你能发布调试消息吗?
    • 我没有改变他们,他们的股票路径。但我似乎不需要,因为他们只是寻找上面确实正确的目录。这是__DIR__ 的返回值:C:\xampp\htdocs\it\bootstrap,这是正确的。我会看看我能做什么
    猜你喜欢
    • 2015-02-02
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多