【问题标题】:htaccess redirect on mvc frameworkmvc框架上的htaccess重定向
【发布时间】:2013-05-24 15:12:38
【问题描述】:

我正在为我的 mvc 站点处理 htaccess 文件。该公司为该网站购买的软件只能在没有 www 的情况下运行,因此我能够修复 htaccess 以允许 URL 中的 www,因为我们的大多数附属公司无论如何都会尝试使用它。但是,这会使 siteurl.org/index.php/admin 和 siteurl.org/index.php/members 无法访问。我试图将这些 URL 从 www 转发到非 www 排除,但我所知道和能找到的一切似乎都与非 MVC 站点有关,而且似乎 mvc 站点的设置完全不同,所以我的例子我的发现对我不起作用。

这是我当前的 htaccess(我必须注释掉转发行以允许管理员访问管理部分和附属机构访问成员部分)

<Files ~ "serial.txt$">
  Order allow,deny
  Deny from all
</Files>

RewriteEngine On

#RewriteCond %{HTTP_HOST} !^www\. [NC]
#RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]


RewriteRule ^aff/(.*)$ /index.php/aff/?aff=$1 [R,L]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [R=301,NC]

如果它可以同时解决,我也很想知道如何清理该 URL,以便我们可以输入 siteurl.org/admin 而不是 siteurl.org/index.php/admin (对于会员也是如此),并且还在 URL 中显示会员名称(它目前正在清理 URL 以删除 /aff/affiliateusername,但会员希望在 URL 中看到他们的名称)。如果有人对为 MVC 编写 htaccess 的特定资源有很好的链接,我将永远感激不尽。提前感谢您的任何帮助。

【问题讨论】:

    标签: php .htaccess url-rewriting


    【解决方案1】:

    在进行解释之前,让我们先弄清楚三件事:

    • Apache 并不关心您的网站是否建立在 MVC 方法/设计模式之上。它。没有。甚至。看。它。对它来说,它看到了 htaccess mod_rewrite 规则。
    • 将序列代码放在根目录下的serial.txt 中的人只是在乞求它使用PHP 中的文件包含漏洞来攻击它。
    • 这与重写规则中的 CodeIgniter 非常相似。

    现在。你的规则:

     RewriteCond %{HTTP_HOST} !^www\. [NC]
     RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
    

    仅当 http 主机不以 www 开头时,此规则才会匹配。 .如果这是真的,那么它将重定向到 http://www。版本。

    根据您的描述,您希望得到相反的结果:您的 CMS 不适用于 www.. 所以,您将需要这个:

    RewriteCond %{HTTP_HOST} ^www\. [NC]
    RewriteRule ^(.*)$ http://mydomain/$1 [R=302, L]
    

    请注意,您需要在其中对您的域进行硬编码。糟透了。

    下一组规则:

    RewriteRule ^aff/(.*)$ /index.php/aff/?aff=$1 [R,L]
    

    这是沼泽标准 - 将 aff/whatever 重定向到 /index.php/aff/?aff=$1

    以后改成这样:

    RewriteRule ^aff/(.*)$ /index.php?/aff/?aff=$1 [L]
    

    这将清理 URL 并防止 Apache 重写周期。

    下一个:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php/$1 [R=301,NC]
    

    这些将通配符匹配任何不存在的内容。和之前一样,把最后一行改成这样:

    RewriteRule ^(.*)$ /index.php?$1 [L]
    

    这将再次使重写变得透明。

    P.S:找一个真正的 CMS 开发人员。 301 几乎没用。

    【讨论】:

    • 不错。 htaccess 显然不是我的强项,但我希望能纠正这一点。附属公司获得基于数据库动态创建的“挤压”页面。如果他们输入 www,他们的挤压页面将不会加载并重定向到公司,这就是我有 www 转发的原因。但是,这破坏了网站的其他 2 个区域,即管理员和会员登录。它必须正确加载带有和不带 www 的挤压页面,并且还必须加载不带 www 的成员和管理员登录区域。如果我使用 RewriteCond 和 RewriteRule 指定特定的 URL 重定向,它要么什么都不做,要么无限循环
    • 我确实尝试了您发布的更改,并保留了除 www 转发之外的所有更改。加载挤压页面时,如何将 /aff/ 保留在 URL 之外?仍然不允许管理员和会员登录区
    • @user1867350:定义“挤压页面”。我上次与互联网营销人员合作是在 3 年前 - 与之对应的规范 URL 是什么?
    • 理想情况下,www.siteurl.org/affiliateusername 将是附属公司用于访问其页面并在 URL 中看到的内容,该 URL 应实际加载 http://siteurl.org/aff/affiliateusername。挤压页面只是从数据库动态创建的个人主页 - 如果会员存在并且处于活动状态,则他们的其他数据库信息 - 名称、电子邮件、电话等显示在标题中,并且那些填写表格的“潜在客户”被交付到公司,但关联公司收到通知并尝试通过销售等“引导”他们。
    • @user1867350:那么我提供的第一件事应该可以工作但需要放在处理www.siteurl.org的VirtualHost上
    猜你喜欢
    • 2016-03-08
    • 2017-09-16
    • 1970-01-01
    • 2013-06-30
    • 2012-12-04
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多