使用句点重定向目录以查询htaccess中的字符串

时间:2017-02-14 14:50:43

标签: apache .htaccess redirect mod-rewrite

我想拥有个性化的网址,其中一个人收到邮件,其上有自己的邮件,并将其重定向到通过查询字符串接收其姓名的登录页面

网址就像

mywebsite.com/phx/joe.smith

我想将此流量重定向到

mywebsite.com/youngstown/index.php?first=joe&last=smith

这应该是301重定向,不区分大小写。如果目录是/ phx / firstname / lastnaname,我可以这样做,但我需要在第一个和最后一个之间使用点而不是目录。

到目前为止我所拥有的是

RewriteEngine on
RewriteBase /

RewriteRule ^phx\/([^\/]+)\/([^\/]+)\/?  youngstown/index.php?FirstName=$1&LastName=$2 [NC,R=301,L]
RewriteRule ^phx\/([^\/]+)\/?  youngstown/index.php?FirstName=$1 [NC,R=301,L]

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

首先,您不需要转义斜杠/。除此之外,你几乎就在那里。主要区别在于\./,例如

RewriteRule ^phx/(.+?)\.(.+)/?$ youngstown/index.php?first=$1&last=$2 [R,NC,L]

答案 1 :(得分:0)

完整的解决方案可能是:

RewriteEngine on
RewriteRule ^phx/([^./]+)\.([^./]+)/?$ /youngstown/index.php?FirstName=$1&LastName=$2 [NC,R=301,L]
RewriteRule ^phx/([^./]+)/?$ /youngstown/index.php?FirstName=$1 [NC,R=301,L]

正如奥拉夫所说,没有必要逃避斜线。我在这里匹配“不是点或斜线”。同时添加$来分隔匹配的结尾并删除不需要的RewriteBase

替代解决方案

或者你可以使用一个规则,当{not}存在时,它会为LastName设置一个空参数:

RewriteEngine on
RewriteRule ^phx/([^./]+)(?:\.([^./]+))?/?$ /youngstown/index.php?FirstName=$1&LastName=$2 [NC,R=301,L]