【问题标题】:htaccess rewrite rule with hyphen in tldhtaccess 在 tld 中使用连字符重写规则
【发布时间】:2014-01-09 21:30:59
【问题描述】:

我正在尝试编写可以转换的 htaccess 文件

http://subdomain.my-tld.com/

http://my-tld.com/file.php?var=subdomain

注意 tld 中的连字符

这是我正在使用的 htaccess

Options +FollowSymLinks 
Options -Indexes

RewriteEngine On 

# Rewrite sub domains. 
RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteCond %{HTTP_HOST} !^www\.my-tld\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.my-tld\.com$ [NC]
RewriteRule ^(.*)$ /file.php?var=%2 [QSA,L]

实际上,我在同一台服务器上的另一个域中使用了相同的代码,它运行良好,但不适用于这个域,我猜问题出在这个域中的连字符..

有什么建议吗?

【问题讨论】:

  • 您是否尝试过转义连字符,如my\-tld
  • @neokio 是,但没有运气
  • - 无关紧要,它们只有在 [] 括号内才有特殊含义。
  • @JonLin 那么你将如何编写实现此目的的代码?
  • 如果我访问“blahblah.my-tld.com”,这些规则在我的空白 htaccess 文件中可以正常工作

标签: php apache .htaccess tld hyphen


【解决方案1】:

对我来说,这些规则使服务器返回“Internal Server Error”,并且会打印错误日志

请求超出了 10 个内部重定向的限制,因为可能 配置错误

我不确定为什么它适用于您所说的另一个域,但只需尝试在最终 RewriteRule 之前添加此条件:

RewriteCond %{QUERY_STRING} !var=

让它通过 url alreay 获取参数“var”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    相关资源
    最近更新 更多