当变量内部有斜杠时如何处理 htaccess 重写?
How to handle htaccess rewrite when variable has a slash inside?
我想将这个 https://example.com/EUR/USD
重写为 https://example.com/details.php?code=EUR/USD
(EUR/USD
是可以更改的变量,例如 USD/GBP
、GBP/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 个条件,这意味着不要对真实文件和真实目录执行此规则。
我想将这个 https://example.com/EUR/USD
重写为 https://example.com/details.php?code=EUR/USD
(EUR/USD
是可以更改的变量,例如 USD/GBP
、GBP/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 个条件,这意味着不要对真实文件和真实目录执行此规则。