1

我正在为.htaccess我的 PHP 服务器中的文件寻找正则表达式。

我想要的是它从第一个目录中检测语言作为参数:

  • 荷兰语
  • zh

任何其他选项都必须被视为目录或文件名。语言必须作为参数给出,而不会破坏任何其他参数。

我也希望最后一个/替换为.php.

一些例子:

host.com/nl/index/ -> host.com/index.php?lang=nl
host.com/de/test/abc/ -> host.com/test/abc.php?lang=de
host.com/be/a/b/c/?t=23 -> host.com/a/b/c.php?lang=be&t=23

这可能吗?我不能让它工作,我希望有人能帮助我!

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule >>> requested expression and replacing pattern <<<
</IfModule>
4

3 回答 3

3
RewriteRule ^/([a-z]{2})(/.+)/?$ $2.php?lang=$1 [QSA]

通过一次考虑一块来解释正则表达式是最容易的。让我们分解一下:

  • ^- URL 的开头
  • /- 匹配第一个斜线
  • ([a-z]{2})- 匹配并捕获 2 个字母(进入$1变量)
  • (- 开始捕获组(进入$2
  • /- 匹配斜线
  • .+- 匹配零个或多个字符
  • )- 结束捕获组 ( $2)
  • /?- 匹配“文件路径”的可选结束斜杠(但不要捕获它)
  • $- 网址结束

因此,您正在捕获两件事:

1 . 语言(捕获组$1):

([a-z]{2})

2 . 文件路径,以斜杠(捕获组$2)开头,后跟可选的斜杠:

(/.+)/?

最后,最后的QSA标志将您的原始查询字符串(如果有的话)附加到您重写的 URL。如果您想让您的正则表达式匹配不区分大小写(即允许 URL 类似host.com/NL/index/),您也可以添加NC标志:[QSA,NC]. 或者,您可以通过在您的正则表达式中使用[A-Za-z]而不是明确允许大写字母。[a-z]

于 2013-07-17T17:40:11.107 回答
1

尝试这个

RewriteRule ^([a-z]{2})/(.+)/?$ /$2.php?lang=$1 [QSA]
于 2013-07-17T17:35:41.937 回答
1

通过启用 mod_rewrite 和 .htaccess httpd.conf,然后将此代码放在您.htaccessDOCUMENT_ROOT目录下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$2.php -f
RewriteRule ^([a-z]{2})/(.+?)/?$ /$2.php?lang=$1 [L,QSA,NC]
于 2013-07-17T17:39:08.613 回答