2009-09-12 87 views
0

我是一个.htaccess n00b,不能为我的生活得到正则表达式的句柄。mod_rewrite重定向规则变量问题

我有下面这段RewriteRule代码工作得很好:

RewriteRule ^logo/?$ /pages/logo.html 

基本上,它需要/pages/logo.html并使其/logo

有没有一种方法可以让我将这些代码概括为变量,这样它就可以自动工作,而不必为每个页面设置独立的行?

我知道$1可以作为一个变量,但通常用于查询,我不能让它在这种情况下工作。

回答

1

首先,你需要知道的mod_rewrite只能处理请求到服务器。因此,您需要请求/logo将其重写为/pages/logo.html。这就是规则的作用,它将内部URL路径/logo的请求重写为/pages/logo.html,反之亦然。

如果你现在想使用匹配的字符串的部分,你需要使用组他们,你则可以参考与$n组((expr))。你的情况格局[^/]将是合适的描述比斜线/以外的任何字符:

RewriteRule ^([^/]+)$ /pages/$1.html 
+0

我是得到它,这样它并不适用于PHP文件在我的服务器上挣扎的唯一件事不受此重写。 我最终与 RewriteCond%{REQUEST_FILENAME}!^。* \。php $ – Yahel 2009-09-12 15:00:00

+0

您也可以使用'RewriteCond%{REQUEST_FILENAME}!-f'来排除任何现有的常规文件。 – Gumbo 2009-09-12 22:41:26

1

试试这个:

RewriteRule ^/pages/(.*)\.html$ /$1 

(.*)匹配pages/.html之间的任何东西。无论它匹配什么,都可以在$1中使用。所以,/pages/logo.html变得/logo/pages/subdir/other_page.html将成为/subdir/other_page