仅针对.php文件的重写规则


RewriteRule for only .php files

我需要重写这个网址:

mysyte.com/index.php?lang=it

自:

mysite.com/it/index

无需重写 CSS HREF、JavaScript SRC 和 Image SRC。我尝试了很多解决方案,但没有一个奏效,有人可以帮助我吗?

谢谢!

编辑:

我试过了:

RewriteEngine On
RewriteRule ^(.*)/(.*) $2.php?lang=$1

但这也会覆盖我的 CSS 调用。

然后我尝试了:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/(.*) $2.php?lang=$1

具有相同的结果

编辑 :在您的 .htaccess 中,写下以下行:

# Activate url rewriting
RewriteEngine on
# Rewrite all url of the form /2-letters-language-code/index to index.php/lang=2-letters-language-code
RewriteRule ^([a-z]{2})/index$ /index.php?lang=$1 [QSA,L]

正则表达式的([a-z]{2})部分表示"每组两个字母",因此它将捕获"it",但也捕获"fr","en"...以及两个字母中的所有其他语言代码。如果这太笼统,您可以根据需要将其替换为 (it|en|fr)。

如果你不仅需要重写index index.php,还需要重写任何字母数字字符串,你可以这样做:

RewriteRule ^([a-z]{2})/([a-zA-Z0-9_]+)$ /$2.php?lang=$1 [QSA,L]

注意第二个括号不要太大,否则规则会捕获您不需要的字符串。例如,[a-zA-Z0-9_]+表示:每组 1 个或多个字母数字字符和下划线。它不包括斜杠 (/) 和连字符 (-)。

这已经在这里回答了:使用 htaccess 重写规则重定向后未加载 CSS

解决此问题的最简单方法是在 HTML 文件的<head>中指定 CSS 文件的完整路径。

如果您的mod_rewrite规则正在修改CSS文件所在的路径,则还需要将其放在RewriteRule之前:

RewriteCond %{REQUEST_FILENAME} !-f

这样可以确保请求在重写文件之前与文件不匹配。