2016-07-27 96 views
1

我想在Apache服务器中使用mod_rewrite重写URL。Htaccess重写URL错误

具体来说,我想重写以下形式的URL - mywebsite.com/web/ger/int/sb/index.html成mywebsite.com/gerintsb/

在上述URL GER,INT的情况下,sb被附加在一起以形成较短的URL。我有很多这样的URL被缩短。

我曾经在我的“网络”文件夹中的.htaccess文件以下重写规则在我的服务器 -

RewriteRule ^([a-z]+)([a-z]+)([a-z]+)$ web/$1/$2/$3/index.html [NC,L] 

但我的原则是不工作。我收到一个对象未​​找到错误。

有人可以排除故障吗?

+0

你想仅此要重写的URL还是有很多这样的URL? –

+0

我有很多这样的网址。比如web/fr/int/mp,web/ger/int/rt等等。我编辑了我的问题,使它更加清晰:) – Adam

回答

2

[a-z]+是贪婪的。它会消耗整个字符串。后两个捕获组不会捕获任何东西。如果斜线在路径的末尾,则规则不匹配。

你只能这样做,如果你知道路径段的可能值,或者如果路径段有一个固定的宽度:

RewriteRule ^(ger|fr)(int|float)(sb|mp|rt)/?$ web/$1/$2/$3/index.html [L] 

或:

RewriteRule ^([a-z]{3})([a-z]{3})([a-z]{2})/?$ web/$1/$2/$3/index.html [L] 
+0

这是我能找到的最接近的。我会做出这个答案,但我也有疑问。当我使用这些mod_rewrite所有我的CSS链接时,如果我使用相对链接,图像.etc将会中断。所以我不得不将相关链接更改为我的整个着陆页中的绝对链接。任何想法如何克服它? – Adam

+0

请参阅[本页](http://stackoverflow.com/tags/mod-rewrite/info)和[本问答](http://stackoverflow.com/questions/27744603/css-js-and-images-do -not-display-with-pretty-url)。 – Sumurai8