Php htaccess从URL获取域名作为变量
想象一下,在我的网站上,我想展示一些关于域的分析,我需要的工作URL示例:Php htaccess从URL获取域名作为变量,php,regex,.htaccess,mod-rewrite,Php,Regex,.htaccess,Mod Rewrite,想象一下,在我的网站上,我想展示一些关于域的分析,我需要的工作URL示例: http://whois.domaintools.com/google.com 正如您在上面的URL中看到的,它将google.com作为变量处理,并将其传递到另一个页面以处理给定的变量,这正是我想要的 为了检测这种变量,这里是我的正则表达式: /^[a-zA-Z\d]+(?:-?[a-zA-Z\d])+\[a-zA-Z]+$/ 上面的正则表达式很简单,可以接受如下内容:google.com,因此在我的.htaccess
http://whois.domaintools.com/google.com
正如您在上面的URL中看到的,它将google.com
作为变量处理,并将其传递到另一个页面以处理给定的变量,这正是我想要的
为了检测这种变量,这里是我的正则表达式:
/^[a-zA-Z\d]+(?:-?[a-zA-Z\d])+\[a-zA-Z]+$/
上面的正则表达式很简单,可以接受如下内容:google.com
,因此在我的.htaccess
文件中:
RewriteRule (^[a-zA-Z\d]+(?:-?[a-zA-Z\d])+\.[a-zA-Z]+$) modules/pages/page.php?domain=$1
上面的规则做了我想做的,但它也将我的主页
重定向到page.php
,而URL中没有任何内容,例如:http://mysitename.com
现在被转发到page.php
我怎样才能解决这个问题
提前感谢由于正则表达式,它还将基本域重定向到page.php。如果在所有地方都使用+,则加号的含义是“匹配前面的模式元素一次或多次”。()如果您请求主页,它会重定向,因为所有元素都显示零次,就像您在正则表达式中定义的那样 您应该定义最小和最大字符数,而不是+字符数(因此不计算零出现次数)。顺便说一句,在谷歌快速搜索“regex域”将输出大量结果,这些结果都经过测试。使用以下示例:
RewriteEngine on
RewriteRule (^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z]{2,3})$) modules/pages/page.php?domain=$1
参考:
更新1:
如果要使用自己的正则表达式,请将最后一个“+”与{2,}交换。顶级域通常至少有2个字符
RewriteEngine on
RewriteCond %{REQUEST_URI} !(\.html|\.php|\.pdf|\.gif|\.png|\.jpg|\|\.jpeg)$
RewriteRule (^[a-zA-Z\d]+(?:-?[a-zA-Z\d])+\.[a-zA-Z]{2,}$) modules/pages/page.php?domain=$1
答案是ty,但我使用该正则表达式是因为我不想验证子域、协议等,
我自己的正则表达式应如何编辑?我编辑了问题,并为您的正则表达式添加了更改!可能是因为以下原因:Apache被配置为在请求主页时加载index.html或index.php。Index.html和Index.php都将由正则表达式计算。因此,您需要在RewriteRuleRewriteCond%{REQUEST_URI}之前使用RewriteCond排除此类文件类型!(\.html\.php\.pdf\.gif\.png\.jpg\\\\.jpeg)$
(我编辑了答案,但还看不到更新)。