【问题标题】:.htaccess Rewrite Rule for 5-letters.htaccess 5 个字母的重写规则
【发布时间】:2017-03-18 05:17:25
【问题描述】:

这对你来说应该是一个相当简单的。

我想将所有使用 5 个数字/字母组合的条目重定向到子网站。

用户将输入
http://www.foo.com/ABC12,它应该重写为
http://www.foo.com/foo/ABC12

作为我输入的 RewriteRule :

RewriteRule /([a-zA-Z0-9]{5}) /foo/$i [L] 

我很确定第一部分。但不确定如何全面实施该规则。

有人有想法吗?

提前致谢!

【问题讨论】:

  • 而不是 $i 应该是 $1 ...否则它应该可以工作。如果你想真正重定向你需要[R,L]
  • 不清楚您要做什么...您想将用户重定向到/foo/...为什么

标签: php apache .htaccess


【解决方案1】:

你建议的正确实现是这样的:

RewriteEngine on
RewriteRule ^/?([a-z0-9]{5})/?$ /foo/$1 [NC,R=301] 

该规则适用于 http 服务器主机配置,同样适用于动态配置文件(.htaccess 样式文件)。

注意:我不太了解这背后的动机,我只提供你所要求的实现。但是请注意,要做到这一点,至少 http 服务器必须能够满足对/foo/... 的请求,因此不要抛出错误,例如针对不存在的资源...

如果资源/foo/... 可以被满足并且您只希望客户端被视觉重定向,而在服务器上提供原始URI,那么您需要添加内部还原规则:

RewriteEngine on
RewriteRule ^/?([a-z0-9]{5})/?$ /foo/$1 [NC,R=301] 
RewriteRule ^/?foo/([a-z0-9]{5})/?$ /$1 [NC,END]

如果这导致内部服务器错误(http 状态 500,您将在您的 http 服务器错误日志文件中找到更详细的信息...),很可能您正在运行一个非常旧版本的 apache http 服务器并且需要用L 标志替换END 标志。这也应该适用于给定的情况。


一般提示:您应该始终喜欢将此类规则放在 http 服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。众所周知,这些文件容易出错,难以调试,而且它们确实会降低服务器的速度。它们仅在您无法控制主机配置的情况下(阅读:非常便宜的托管服务提供商)或如果您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦)提供它们作为最后一个选项)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-15
    • 2017-11-21
    • 2013-06-29
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多