0

我正在为我的 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 的特定资源有很好的链接,我将永远感激不尽。提前感谢您的任何帮助。

4

1 回答 1

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]

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

PS:找一个真正的CMS开发者。301 几乎没用。

于 2013-05-24T15:25:57.677 回答