.htaccess mod rewrite-允许句号

.htaccess mod rewrite-允许句号,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我需要一个允许句号的重写规则。我怎么能允许这样呢?我想要的是什么 shop/domain/www.test.com将成为shop/domain/controller.php?param1=www.test.com 我的原始规则如下: 重写规则^shop/domain/([^/]+)/?$shop/stock/controller.php?param1=$1[NC] 这是有效的,但只有当我删除了句号 我还尝试了以下方法: 重写规则^shop/domain/([^/]+)/?$shop/domain

我需要一个允许句号的重写规则。我怎么能允许这样呢?我想要的是什么 shop/domain/www.test.com将成为shop/domain/controller.php?param1=www.test.com

我的原始规则如下:

重写规则^shop/domain/([^/]+)/?$shop/stock/controller.php?param1=$1[NC]

这是有效的,但只有当我删除了句号

我还尝试了以下方法:

重写规则^shop/domain/([^/]+)/?$shop/domain/controller.php?param1=$1[NC]

这允许使用句号,但随后是has controller。php是参数,它应该是www.test.com。

如果所有域都以“www.”开头,您可以这样做

RewriteRule ^shop/domain/www\.([^/]+)/?$ shop/domain/controller.php?param1=$1 [NC,L]
您的规则的问题是,它还匹配
controller.php
,就好像它是一个域一样。您可以添加以下两个重写条件来防止这种情况:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^shop/domain/([^/]+)/?$ shop/domain/controller.php?param1=$1 [NC,L]

-d
表示不存在目录,
-f
表示不是现有文件(例如
controller.php
)。

是的,谢谢。如果我不想要“www.”怎么办?我不知道它是如何工作的,如果我包括www.和不工作,当我离开它。我很高兴我可以帮助。请考虑接受这个答案。祝你的商店好运!