apache - Mod重写uri中第一个斜杠内的通配符问题
问题描述
我想这样重写:
/v2/auth /v2/myphp.php
/v1/auth /v1/myphp.php
应该很简单,但我遇到了问题。这是一个最终应该做我想做的事情的例子,重写条件有效,但重写失败:
RewriteCond %{REQUEST_URI} ^/v\d+/auth$ [NC]
RewriteRule "^.*(v\d+).*$" "/$1/myphp.php" [L]
下面的重写适用于http://mydomaindotcom/v2/auth:
RewriteRule "^.*auth$" "/v2/myphp.php" [L]
但这也适用于相同的网址:
RewriteRule "^.*a.*$" "/v2/myphp.php" [L]
但这失败了,我想这表明在第一个斜杠中捕捉到什么是一个问题?:
RewriteRule "^.*v.*$" "/v2/myphp.php" [L]
将不胜感激任何帮助来解决这个问题!
解决方案
您的 RewriteCond 将检查它是否为“/vDIGITS/auth”,其中 DIGITS 为 [0-9]。所以你的线:
RewriteCond %{REQUEST_URI} ^/v\d+/auth$ [NC]
没关系。 \d+
匹配至少一位数字。那里没问题。
然后,您的 RewriteRule 将获取 DIGITS 并使用它来构建您的目标。因此,使用 RewriteCond 中的相同正则表达式并添加括号,如下所示:
RewriteRule "^/(v\d+)/auth$" "/$1/myphp.php" [L]
由于您知道 RewriteCond 与该正则表达式匹配,因此在 RewriteRule 中使用它是双赢的。
仅供参考,您希望浏览器让您独自处理未来的请求,请在“L”标志之后使用标志“R = 301”使重写永久化。
推荐阅读
- c# - botbuilder 不等待来自 HTTP 响应的响应(使用 restsharp)
- ruby-on-rails - 如何在 Rails 5.2 中为使用 ActiveStorage 的模型创建固定装置
- css - Wordpress 对齐按钮不起作用
- php - 从 PHP 中的简码获取内容
- postgresql - PostgreSQL 检查两个字段之一
- testing - 由于特定的关键测试失败,pytest 跳过其他套件的测试
- ruby-on-rails - Nginx + 乘客 - 403 Forbidden - Ruby on Rails
- greasemonkey - Tampermonkey 和下载对话框
- java - Fragments、FrameLayout如何让是可滚动的?
- javascript - javascript array filter by objects containg name pattern and date time