微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当变量内部有斜杠时如何处理 htaccess 重写?

如何解决当变量内部有斜杠时如何处理 htaccess 重写?

我想将此 https://example.com/EUR/USD 重写为 https://example.com/details.PHP?code=EUR/USDEUR/USD 是可以更改的变量,例如 USD/GBPGBP/EUR 等。)>

因为变量内部有斜线,下面的规则不起作用,但如果变量内部没有斜线(例如:https://example.com/details.PHP?code=EURUSD),它就完美了。

RewriteEngine On
RewriteRule ^([^/]*)$ /details.PHP?code=$1 [L]

如何处理这种情况?

编辑:我的货币 htaccess :

RewriteEngine on
RewriteRule ^/(.*)$ /$1 [L,R=301]
#RewriteCond %{SERVER_PORT} 80
#RewriteRule ^(.*)$ https://example.com/$1 [R,L]
#RewriteCond %{HTTP_HOST} ^www.example.com [NC]
#RewriteRule ^(.*)$ https://example.com/$1 [L,R=301,NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.PHP -f
RewriteRule ^(.*)$ $1.PHP

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ details.PHP?code=$1

解决方法

您的子模式 [^/]* 将匹配 0 个或多个不是 / 的任何字符,并且由于您的 GET 变量中有 / 这将不起作用。

您可以使用:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Z/]+)/?$ details.php?code=$1 [L,QSA]

注意 2 个条件的 2 RewriteCond 行,这意味着不对真实文件和真实目录执行此规则。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。