-1

我很糟糕,mod_rewrite但是我需要重写对文件夹的任何请求/files/users/*/(* 是通配符)/view/并将文件名插入到查询参数中,如下所示:

/files/users/9/test.pdf变成/view/?file=test.pdf

假设.htaccess文件将位于内部,我将如何处理/files/users/

如果您在我慢慢尝试熟悉的过程中解释您的解决方案如何工作,我将不胜感激mod_rewrite

4

2 回答 2

0

所以,你想把我所有的商业机密都放在银盘上吗?

嗯,我尽力了。;-)

首先,您必须知道文档在哪里。在这里寻找参考:mod_rewrite。或者mod_rewrite,如果您的 Apache 版本是 2.2。

您将在Apache mod_rewrite中找到包含大量链接的概述。在那里,您会找到关于重写 URL的精彩介绍。还可以在这里查看许多标准示例。

由于 mod_rewrite 支持 PCRE 正则表达式,因此您可能不时需要perlre和/或regular-expression.info

现在回答你的问题

RewriteEngine On
RewriteRule ^(?:.+?)/(.*) /view/?file=$1

这可能已经足够了。(?:.+?)它在该子目录中查找子目录/files/users并捕获文件的名称(.*)。如果此模式匹配,它会重写 URL/view/?file=并将捕获的文件附加到$1,这给出/view/?file=$1.

当然,所有未经测试的人都玩得开心。

PS 附加信息在.htaccess info.htaccess faq处。

于 2013-02-26T15:40:32.990 回答
0

将以下指令放入您的.htaccess文件中以重写 /files/users/9/test.pdf/view/?file=test.pdf. 实际上,这意味着如果您访问http://yourdomain.com/files/users/9/test.pdf ,那么将为访问者提供重写的 url,即http://yourdomain.com/view?file=test .pdf

RewriteRule ^[^/]+/(.*)$ /view/?file=$1 [L]

RewriteRule指令是 Apache mod_rewrite模块的一部分。它需要两个参数:

  1. 模式- 与当前 URL 路径匹配的正则表达式(请注意,URL 路径不是整个 URL,而是例如/my/path,但在.htaccess上下文中,前导斜杠/被剥离给我们my/path)。
  2. 替换- 用户将重写或重定向到的目标 URL 或路径。

解释规则

模式^[^/]+/(.*)$

^    - the regex must match from the start of the string
[^/] - match everything but forward slash 
+    - repetition operator which means: match 1 or more characters
/    - matches a forward slash
(.*) - mathes any characters. The dot means match any character. The star operator means match ANY characters (0 or more). The parantheses means the match is grouped and can be used in backreferences.
$    - the regex must match until the end of the string    

替换/view/?file=$1

...意味着我们/view/用查询参数文件重写了文件夹的 URL 路径。查询参数file将包含模式中的第一个分组匹配,因为我们将$1值传递给它(这意味着我们的 RewriteRule 模式中的第一个匹配)。

旗帜[L]

...意味着mod_rewrite将停止处理重写规则。这很方便避免不必要的行为和/或无限循环。

于 2013-02-26T15:43:39.377 回答