0

我开发了一个 PHP webshop 项目,它为每个客户独立工作。这意味着每个客户都安装自己的网店源文件 php.ini。

我发现这是维护许多网站的杀手,所以我决定将网上商店的源文件放在服务器的一个公共位置,并在 apache 服务器上创建一个别名,以便所有 www 客户都可以访问它。

然后每个客户在他们自己的 www 文件夹中都有自己的配置文件、日志文件夹、模板文件夹等。

我设法完成了上面所有的事情。但我的问题是网址。

URL 如下所示: http ://www.exampleshop.com/webshop/v1/index.php

我需要在 url 中隐藏 webshop/v1,使其如下所示: http ://www.exampleshop.com/index.php

我玩了 url rewrite mod 但它一直告诉 index.php 不存在,因为它确实在 exampleshop.com 的根目录中查找不正确的文件,它位于 /webshop/v1

有任何想法吗?备择方案。

希望有人可以提供帮助:-)


我设法通过以下方式完成了上述工作:-)

RewriteEngine On
#for admin pages redirection
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$/admin/index\.php$ /webshop/v1/admin/$1 [L]

#for webshop pages redirection
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /webshop/v1/$1 [L]

以上工作,但唯一的问题是它无法识别索引文件。当我在没有指定页面的情况下转到 url 时,它不起作用,因为索引文件不起作用。我必须输入完整的 url,例如 webshop.com/index.php 才能让它工作。

有没有办法删除扩展名:-)

无需在 url 中指定 index.php 也可以工作的解决方案

#if no file specified, forward to index
RewriteRule ^$   webshop/v1/   [L]
#if no file specified, forward to index
RewriteRule ^admin/$   webshop/v1/admin/   [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /webshop/v1/$1 [L]
4

2 回答 2

0

VirtualHostAlias指令应该修复它。

于 2012-09-17T15:17:52.097 回答
0

我会根据主机将请求路由到应用程序级别。

假设您在服务器上安装了文件,以及指向该服务器的各个域,即 customer1.com、customer2.com、customer3.com 等。然后,在您的index.php文件中,只需检测文件从哪个域访问并切换根据需要进行配置设置。

您可以有一个将设置映射到域的数据库表,因此如果您不想使用基于文件的配置,则可以执行数据库查询和获取设置。

更新

那么,在这种情况下,您需要一个 .htaccess 规则。请在你的根.htaccess中这样做:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^$   webshop/v1/   [L]
    RewriteRule (.*) webshop/v1/$1 [L]
</IfModule>

这在您的/webshop/v1/目录中:

<IfModule mod_rewrite.c>
    RewriteEngine On

    # for admin pages redirection
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^admin/(.*)$ /webshop/v1/admin/$1 [L]

    # for webshop pages redirection
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /webshop/v1/$1 [L]
</IfModule>
于 2012-09-17T15:18:18.377 回答