【发布时间】:2014-11-25 21:57:16
【问题描述】:
很抱歉在这里提出了第 100 万个 Apache 重写问题。我尝试了我所知道的一切,但有一个小步骤(希望是)我正在寻找可以为我照亮的人。
我有一个类似这样的 URL 结构:
- assets
- assets/dist/19854/css/my.css
- css/my.css
我正在尝试将根目录中的assets/dist/19854/css/my.css file 重写为css/my.css 文件。
我在我的服务器上启用了 mod_rewrite,并且我对重写规则有基本的了解,但如果你能帮助我使用 Regex,那就太好了。
RewriteCond %{REQUEST_URI} ^assets/dist/([0-9/.]+)/(.*)$
RewriteRule ^assets/dist/([0-9]+)/(.*)$ $ [L,QSA]
上述规则的问题是它重写为./19854,但我实际上对第二个表达式的匹配感兴趣。如果可能的话,我还想确保 css/my.css 文件首先存在。
提前致谢!
编辑:
感谢 cmets 和答案。为了进一步解释我的情况,这是一个使用 CDN 的小型站点,每次构建新版本时,assets/dist/[0-9] 中的数字都会更改,因此所有资产的源 URL 都会更改。但是我使用 CSS 编译器来编译 CSS 文件,所以 CSS 文件位于同一个文件夹中 (css/my.css)。
我还有一些其他的重写,所以我让我的RewriteConds 更加严格。
到目前为止,上面的重写与数字部分匹配,但我试图在数字部分之后重写 URL。
【问题讨论】:
-
RewriteRule's 中的引用可以用 $1、$2 等来引用,RewriteCond's 中的引用可以用 %1、%2、%3 等来引用。为什么要这样做你有一个完全符合你的规则的 rewritecond 顺便说一句? -
我不得不使用严格的 RewriteCond 因为还有一些其他的重写,而这个重写只匹配网站的一小部分。我尝试使用 $1、2 等,但它们都给出相同的结果(在真实服务器中也是如此。上面的屏幕截图来自 martinmelin.se/rewrite-rule-tester)
-
那个测试仪坏了。使用
$2并在真实服务器上进行测试。 -
你先生是救命恩人!我的
RewriteCond出现问题,导致重写无法在我的服务器中运行,并且一直以来,我都在为 $1、2 和 %s 苦苦挣扎。老实说,我不知道 % 和 $ 之间的区别。非常感谢您的智慧!
标签: regex apache mod-rewrite url-rewriting