我想将我的应用程序移动到服务器的根目录。我在用段屏蔽子目录时遇到问题。
当前网址: 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/