我需要重写这个网址:
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
这样可以确保请求在重写文件之前与文件不匹配。