Mod Rewrite - знак равенства регулярного выражения в URL - PullRequest
0 голосов
/ 09 мая 2020

В моем .htaccess у меня есть правила перезаписи, которые считывают значения с чистого выглядящего URL.

Мне нужно отправить все (тщеславные) URL-адреса на request.php, кроме URL-адреса с этим путем: /change-email/[number ( and or ) character and the '=' sign]

Все работает нормально, но когда строка имеет знак равенства, это перехватывается другими правилами.

Примеры:

mysite.com/change-email/ -> go to request.php [ok]

mysite.com/change-email -> go на request.php [ok]

mysite.com / change-email / dasu564345ytfghafsfda -> go to change-email.php [ok]

mysite.com / change-email / dasu564345ytfghafsfda = -> go to request.php [not ok] он должен go to /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

1 Ответ

1 голос
/ 09 мая 2020

\w не учитывает =. Попробуйте следующее регулярное выражение для change-email.php url:

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

...