提问者:小点点

使用。htaccess从url不存在的特定位置加载索引文件


当用户vitis的url不存在时,我需要使用。htaccess从特定目录加载索引文件。 下面是我的文件夹结构:

root/realdirectory/virtualdirectory/virtualproducturl

我的索引文件位于root/realdirectory中

以及其他一些使任务更加复杂的东西:如果用户访问以下站点,则必须加载root/realdirectory/index.php:

-root/realdirectory/virtualdirectory/virtualproducturl or 
-root/realdirectory/virtualdirectory/

VirtualDirectory是我的产品类别,当用户只访问类别url时,我想从root/realdirectory/index.php向他显示一些信息


共1个答案

匿名用户

听起来很直截了当:当一个请求没有被解析到现有的文件或文件夹时,然后在内部将其重写到“索引文档”:

RewriteEngine on
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^ /index.php [END]

如果您使用上述规则收到内部服务器错误(http状态500),那么您操作的可能是非常旧版本的apache http服务器。 在这种情况下,您将在http服务器错误日志文件中看到不支持的[END]标志的明确提示。 您可以尝试升级或使用较旧的[L]标志,在这种情况下它可能会工作相同,尽管这有点取决于您的设置。

此实现将同样地在http服务器主机配置中或在分布式配置文件(“。htaccess”文件)中工作。 显然,重写模块需要加载到http服务器内部,并在http主机中启用。 如果您使用分布式配置文件,您需要注意在主机配置中启用了它的解释,并且它位于主机的document_root文件夹中。

还有一个一般性的意见:您应该始终倾向于将这样的规则放在http服务器主机配置中,而不是使用分布式配置文件(“。htaccess”)。 这些分布式配置文件增加了复杂性,经常导致意外行为,难以调试,而且它们确实降低了http服务器的速度。 它们仅作为最后一个选项提供给您,用于您无法访问真正的http服务器主机配置的情况(阅读:真正廉价的服务提供商),或者用于坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)。