在 CakePHP 上使用域作为“前缀”

Posted

技术标签:

【中文标题】在 CakePHP 上使用域作为“前缀”【英文标题】:Use domain as "prefix" on CakePHP 【发布时间】:2010-10-27 10:01:15 【问题描述】:

假设我有一个运行 Cakephp 的站点,并且我有前缀“product”。

我有很多网页的网址如下:

http://mysite.com/produt/blue-shirt/details
http://mysite.com/produt/blue-shirt/order
http://mysite.com/produt/skate/details
http://mysite.com/produt/sun-glasses/vendors

现在我需要使用像http://mysite-blue-shirt.com/ 这样的域作为蓝衫产品的“快捷方式”,我的网址将变为:

http://mysite-blue-shirt.com/details
http://mysite-blue-shirt.com/order

我需要做什么?

我认为这与网站根目录上的.htaccess 相关,在app 目录之外。

这是当前的语法:

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

【问题讨论】:

【参考方案1】:

试试这个:

<IfModule mod_rewrite.c>
   RewriteEngine on

   RewriteCond    %HTTP_HOST ^mysite-blue-shirt\.com
   RewriteCond    %REQUEST_URI !^/product/blue-shirt
   RewriteRule    ^(.*)$ app/webroot/product/blue-shirt/$1 [L]

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

第一行检查网站的名称。第二个检查它是否还没有被重写为 blue-shirt。最后一行执行重写。

【讨论】:

不应该是RewriteRule ^(.*)$ app/webroot/index.php?url=product/blue-shirt/$1 [L] 这也有效。查看 app/webroot 中的 .htaccess 文件。最好按照我编辑的答案显示的方式重写内容。或者,您可以将 QSA 标志添加到您的规则中以附加任何查询字符串。记住要彻底测试,因为极端情况很容易发展(例如从 Cake 内部重定向)。【参考方案2】:

我认为您需要创建自己的自定义路由类。检查这个:http://mark-story.com/posts/view/using-custom-route-classes-in-cakephp

【讨论】:

【参考方案3】:

要让外界看到这一点,您需要注册 mysite-blue-shirt 和所有其他变体。

【讨论】:

我不是在谈论域...我在问我是如何做到的,使用 htaccess 或 hackin 进入 CakePHP :)

以上是关于在 CakePHP 上使用域作为“前缀”的主要内容,如果未能解决你的问题,请参考以下文章

cakephp 3如何增加会话超时

CakePHP2 与 CakePHP3 在同一个域上共存

Apple iphone导致按钮在网站上被压扁

在 CakePHP 中完成的网站上两个不同域之间的会话维护问题

CakePHP 3.x - 仅在前缀中的扩展路由器

CAKEPHP 1.2/1.3 中的前缀路由和插件