首页 > 解决方案 > Mod Rewrite - URL 中的正则表达式等号

问题描述

在我的 .htaccess 中,我有一个重写规则,它从一个干净的 url 读取值。

我需要将所有(虚荣)网址发送到request.php具有此路径的网址除外:/change-email/[number ( and or ) character and the '=' sign]

一切正常,但是当字符串具有等号时,会从其他规则中截取。

例子:

mysite.com/change-email/--> 转到request.php[ok]

mysite.com/change-email--> 转到request.php[ok]

mysite.com/change-email/dasu564345ytfghafsfda --> 转到change-email.php[ok]

mysite.com/change-email/dasu564345ytfghafsfda= --> 转到request.php[not ok] 它应该转到/includes/change-email.php

主应用程序部分中的 3° 规则

这是.htaccess

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#main app rules
RewriteRule ^change-email(\/|)?$ /request.php?key=change-email [QSA]
RewriteRule ^change-email/([\w+]{1,})(\/|)?$ /includes/change-email.php?email=$1 [QSA] <-- need to catch = sign!
RewriteRule ^([\w+]{1,})(\/|)?$ /request.php?&key=$1 [QSA]

ErrorDocument 404 /request.php

标签: regexapache.htaccessmod-rewriteurl-rewriting

解决方案


\w不考虑=。尝试以下change-email.phpurl 的正则表达式:

^change-email/([\w\=]{1,})(\/|)?$


推荐阅读