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

How to handle htaccess rewrite when variable has a slash inside?

我想将这个 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= [L]

如何处理这种情况?

编辑:我的货币 htaccess :

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

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

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

您可以使用:

RewriteEngine on

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

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

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