如何解决htaccess仅将路径从THE_REQUEST提取到变量
这应该很简单,但是尝试了几个小时并且到处搜索之后,所有相关的答案都不够用。
到目前为止,我已经拥有了
RewriteCond %{THE_REQUEST} /([a-zA-Z0-9-_/\.]+)?
RewriteRule ^(.*)$ - [E=TRGT:%1]
匹配 的操作如下:
- 对于URL
example.com
,它不应包含任何内容,或者未定义 - 对于URL
example.com/
,它不应包含任何内容,或者未定义 - 对于网址
example.com/some-word
,它应包含some-word
- 对于网址
example.com/some-word/
,它应包含some-word
- 对于网址
example.com/some-word/?foo=bar
,它应包含some-word
- 对于网址
example.com/another_word/
,它应包含another_word
- 对于网址
example.com/folder/file.ext
,它应包含folder/file.ext
- 对于网址
example.com/some/other.dot?bar=foo
,它应包含some/other.dot
- 对于网址
example.com/thing.ext/?foo=bar&bar=foo
,它应包含thing.ext
到目前为止,我的工作似乎一直有效,但当请求以some/
-或some/?thing=wat
结束时,则请求包含some/
我认为我缺少了一些非常简单的东西;任何帮助将不胜感激,谢谢。
更新
我已经通过以下代码设法达到了这些确切的要求,但是,尝试了多种方法以1-liner进行操作后,它却以失败告终,所以我在几行中做到了:
RewriteCond %{THE_REQUEST} (?<=\s)(.*?)(?=\s)
RewriteRule ^(.*)$ - [E=HREFPATH:%1]
RewriteCond %{ENV:HREFPATH} (^.*)?\?
RewriteRule ^(.*)$ - [E=HREFPATH:%1]
RewriteCond %{ENV:HREFPATH} /(.*)
RewriteRule ^(.*)$ - [E=HREFPATH:%1]
RewriteCond %{ENV:HREFPATH} (.*)/$
RewriteRule ^(.*)$ - [E=HREFPATH:%1]
如果有人可以将其简化为s3xy 1(或2)衬里,我将选择您的答案;预先感谢。
解决方法
基于接受的答案here,以下内容满足了问题的要求:
RewriteCond %{THE_REQUEST} \s/+([^?]*?)/*[\s?]
RewriteRule ^ - [E=HREFPATH:%1]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。