.htaccess mod_重写重定向规则变量问题

.htaccess mod_重写重定向规则变量问题,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我有点像.htaccess n00b,我一辈子都不能掌握正则表达式 我有下面的RewriteRule代码可以正常工作: RewriteRule ^logo/?$ /pages/logo.html 基本上,它需要/pages/logo.html并使其成为/logo 有没有一种方法可以让我用变量来概括代码,这样它就可以自动工作,而不必为每个页面设置独立的行 我知道,$1可以用作变量,但这通常用于查询,在这种情况下,我无法使其工作。尝试以下方法: RewriteRule ^/pages/(.*)\.

我有点像.htaccess n00b,我一辈子都不能掌握正则表达式

我有下面的
RewriteRule
代码可以正常工作:

RewriteRule ^logo/?$ /pages/logo.html
基本上,它需要
/pages/logo.html
并使其成为
/logo

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

我知道,
$1
可以用作变量,但这通常用于查询,在这种情况下,我无法使其工作。

尝试以下方法:

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

(.*)
匹配
页面/
.html
之间的任何内容。无论它匹配什么,都将在
$1
中使用。因此,
/pages/logo.html
变成
/logo
/pages/subdir/other_page.html
变成
/subdir/other_page
首先,您需要知道mod_rewrite只能处理对服务器的请求。因此,您需要请求
/logo
将其重写为
/pages/logo.html
。这就是规则所做的,它在内部用URL路径
/logo
将请求重写为
/pages/logo.html
,反之亦然

如果现在要使用匹配字符串的部分,则需要使用组对它们进行分组(
expr
),然后可以使用
$
n
引用它们。在您的情况下,模式
[^/]
适用于描述除斜杠以外的任何字符:

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

我唯一要做的事情就是得到它,这样它就不会应用到我服务器上的php文件中,而这些文件不会被重写。我最终使用了RewriteCond%{REQUEST_FILENAME}!^.*\。php$您还可以使用
RewriteCond%{REQUEST\u FILENAME}-f
以排除任何现有的常规文件。