【发布时间】:2012-05-03 06:40:46
【问题描述】:
我有一个允许用户创建和构建网站的应用程序。我们称之为 system.com。当用户创建一个带有他们已转发到我们的名称服务器的域(例如 domain.com)的站点时,它会创建文件夹并通过 cPanel API 将他们的域添加到我们的服务器到像 这样的文件夹system.com/[用户 ID]/[站点 ID]/。在该文件夹中有一个 index.php 文件和一个 .htaccess 文件,内容如下:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)/$ index.php?page=$1 [L]
我不会从那里详细介绍它的工作原理,但基本上用户可以创建像 domain.com/something/something-else/ 这样的页面。 “something”文件夹显然并不真正存在,我们的系统只是从 htaccess 中获取它们并从那里开始。
我的问题是 domain.com/something/something-else/ 有效,但 domain.com/something/something-else 返回 404。我一直做研究并尝试很多事情,但似乎无法让它发挥作用。有任何想法吗?提前致谢。
编辑:
我应该提到到目前为止我所尝试的。我尝试将重写规则更改为不管尾斜杠如何工作,如下所示:
RewriteRule ^(.*)(?/$) index.php?page=$1 [L]
以及它的其他变体。
我也尝试了不同的方法来强制使用斜杠,但这些方法都不起作用。
【问题讨论】:
-
看起来网络服务器将
domain.com/something/something-else视为文件something-else和something-else/之类的文件夹。尝试从您的RewriteRule中删除/,例如RewriteRule ^(.*)$ index.php?page=$1 [L] -
所以你的意思是如果用户输入一个没有斜杠的url,那么url重写器必须自动添加一个斜杠?
-
嗯,不,那也没用。
-
那你想做什么?
-
@Mahan 理想情况下,它应该拉出正确的页面,无论是否有斜杠,但如果它还执行添加斜杠的初始重定向,那就没问题了。我只是不明白为什么没有任何效果——即使是像
RewriteRule ^something/something-else$ /something/something-else/ [R=301]这样的标准 301@
标签: php apache .htaccess http-status-code-404