我目前使用以下方法将.rss文件路由到一个动态生成rss提要的脚本:
RewriteRule ^(.*).rss$ /get-feed.pl?item=$1
它可以完美地处理如下URL:
www.example.com/articles.rss
我想做的是将URL更改为:
www.example.com/rss/articles/
我试过的所有方法都不管用。
vmjh9lq91#
我只是想在食谱里加一些斜线,但我不是这些食谱的Maven,所以它们不起作用。像这样的东西不起作用:RewriteRule ^/rss/(.*)/$ /get-feed.pl?item=$1(“recipe”=正则表达式/缩写为“regex”或Apache文档中的RewriteRule“pattern”--至少我认为这是你所指的?我们不是在这里烤蛋糕!))这是非常接近的,除了RewriteRulepattern 匹配的URL路径在.htaccess(目录)上下文中使用时不以斜杠开头。^rss/(.*)/$。如果您查看第一个规则返回的内容,则会发现捕获的反向引用中没有斜杠前缀(即item URL参数的值)。但是,这里还有其他(小)问题...
RewriteRule ^/rss/(.*)/$ /get-feed.pl?item=$1
RewriteRule
.htaccess
^rss/(.*)/$
item
(.+)
(.*)
/rss/foo/bar/baz/
articles
L
last
因此,如果您希望重写www.example.com/rss/articles/的URL(注意尾部斜杠),请尝试以下方法:
RewriteRule ^rss/([\w-]+)/$ /get-feed.pl?item=$1 [L]
确保在测试之前清除浏览器缓存。这将需要接近.htaccess文件的顶部,* 在 * 任何现有的重写之前。
严格来说,这并不正确,因为它可能匹配太多。rss前面的未转义点匹配 any 字符。.*子模式匹配0个或多个字符--它必须是 something。因此,它实际上应该是这样的:
rss
.*
RewriteRule ^([\w-]+)\.rss$ /get-feed.pl?item=$1 [L]
1条答案
按热度按时间vmjh9lq91#
我只是想在食谱里加一些斜线,但我不是这些食谱的Maven,所以它们不起作用。像这样的东西不起作用:
RewriteRule ^/rss/(.*)/$ /get-feed.pl?item=$1
(“recipe”=正则表达式/缩写为“regex”或Apache文档中的
RewriteRule
“pattern”--至少我认为这是你所指的?我们不是在这里烤蛋糕!))这是非常接近的,除了
RewriteRule
pattern 匹配的URL路径在.htaccess
(目录)上下文中使用时不以斜杠开头。^rss/(.*)/$
。如果您查看第一个规则返回的内容,则会发现捕获的反向引用中没有斜杠前缀(即item
URL参数的值)。但是,这里还有其他(小)问题...
(.+)
而不是(.*)
。但是,这应该有更多的限制,所以只匹配一个路径段,而不是任何URL路径(我怀疑这很可能会失败)。例如,推测/rss/foo/bar/baz/
不应该匹配?articles
形式的字符串,那么让正则表达式更具限制性,以便它只匹配字母(或者字母+数字+连字符)?L
(last
)标志,如果后面有其他指令,则会出现问题。因此,如果您希望重写
www.example.com/rss/articles/
的URL(注意尾部斜杠),请尝试以下方法:确保在测试之前清除浏览器缓存。
这将需要接近
.htaccess
文件的顶部,* 在 * 任何现有的重写之前。严格来说,这并不正确,因为它可能匹配太多。
rss
前面的未转义点匹配 any 字符。.*
子模式匹配0个或多个字符--它必须是 something。因此,它实际上应该是这样的: