apache - 使用 .htaccess 将子目录屏蔽为带有段的根目录

标签 apache .htaccess

我想将我的应用程序移动到服务器的根目录。我在用段屏蔽子目录时遇到问题。

当前网址: mysite.com/client/kelloggs/sketches/image1.png
当前 htaccess: RewriteRule ^client/([^/]+)/([^/]+)/([^/]+) /client_view/_show_mocks.php?client_name=$1&milestone=$2&image=$3 [NC]
如何删除 client/而是有这样的网址? mysite.com/kelloggs/sketches/image1.png
希望:mysite.com/kelloggs/sketches/image1.png

最佳答案

为了使您的 http 服务器响应您想象的 URL 模式,您只需对当前规则进行细微调整。最重要的是删除 client/匹配模式的前缀,正如@AleksG 在他之前的评论中所建议的那样。我做了一些额外的小改动,使规则更加健壮。

处理相反的方向通常也很有意义,因此要重定向仍然使用“旧” URL 模式的客户端,所以我也添加了这一点:

RewriteEngine on

RewriteCond %{QUERY_STRING} (?:^|&)client_name=([^&]+)&milestone=([^&]+)&image=([^&]+)(&|$)
RewriteRule ^/?client_view/_show_mocks\.php$ /%1/%2/%3 [R=301]

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^/?([^/]+)/([^/]+)/([^/]+)$ /client_view/_show_mocks.php?client_name=$1&milestone=$2&image=$3 [END]

最好先从 302 临时重定向开始,然后再将其更改为 301 永久重定向,前提是您确定一切都已正确设置。这可以防止在尝试时出现缓存问题......

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

此规则同样适用于 http 服务器主机配置或动态配置文件(“.htaccess”文件)。显然重写模块需要在http服务器内部加载并在http主机中启用。如果您使用动态配置文件,您需要注意它的解释在主机配置中完全启用,并且它位于主机的 DOCUMENT_ROOT 中。文件夹。

和一般性评论:您应该始终更喜欢将此类规则放在 http 服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些动态配置文件增加了复杂性,通常是导致意外行为的原因,难以调试,而且它们确实减慢了 http 服务器的速度。它们仅在您无法访问真正的 http 服务器主机配置(阅读:非常便宜的服务提供商)或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)的情况下作为最后一个选项提供。

关于apache - 使用 .htaccess 将子目录屏蔽为带有段的根目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55518695/

相关文章:

php - 如何安装和配置最新的xampp、php、Mysql、apache服务器,并使用dreamviewer进行配置

eclipse - 如何启动eclipse中打包的apache tomcat?

windows - 如何找到 Apache 的 httpd.exe 安装位置?

javascript - 如果没有则添加查询字符串

apache - Tomcat 子域关联

asp.net-mvc - 如何防止 Mono MVC3 应用程序中的内存泄漏?

linux - 为什么 My_controller 不能在 Linux 主机上工作?

javascript - 用php编写客户端重定向服务器端

php - 谷歌索引同一页面的两个 URL - 有和没有 index.php

apache - 规则 .htaccess 从 http ://miodominio. 重定向到 https ://www. miodominio.com