Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php htaccess从URL获取域名作为变量_Php_Regex_.htaccess_Mod Rewrite - Fatal编程技术网

Php htaccess从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

想象一下,在我的网站上,我想展示一些关于域的分析,我需要的工作URL示例:

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都将由正则表达式计算。因此,您需要在RewriteRule
RewriteCond%{REQUEST_URI}之前使用RewriteCond排除此类文件类型!(\.html\.php\.pdf\.gif\.png\.jpg\\\\.jpeg)$
(我编辑了答案,但还看不到更新)。