Htaccess URL重写,重写规则不起作用

时间:2018-02-05 15:53:59

标签: .htaccess url url-rewriting

尝试了google,stackoverflow,youtube上提供的许多不同版本,但仍然无效。

我试图在.htaccess中使用的一个例子:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^index/([0-9]+)$ index.php?lang=$1 [L]

我的网址: http://mydmain.com/subfolder/?lang=en

我希望这个网址看起来像: http://mydmain.com/subfolder/en

2 个答案:

答案 0 :(得分:1)

您的规则似乎与您要重写的任何网址都不匹配。首先,您尝试匹配index/的规则,该规则在您在问题中提供的网址中根本不会出现。此外,您网址中的第二个路径段为en,但您的规则仅匹配数字[0-9])。请改用此规则:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/([a-z][a-z])$ $1?lang=$2 [L,QSA]

这两个条件可确保您不会重写已映射到内容的网址。并且规则已更改为匹配以" / en"结尾的任何网址,或除" en"以外的任何2个字母。

答案 1 :(得分:0)

如果要输入yourdomain.com/subfolder/en并在内部转到yourdomain/subfolder/?lang=en,请将以下代码放在主目录.htaccess文件中:

RewriteEngine On
RewriteRule ^subfolder/([A-Za-z0-9-\+]+)/?$ /subfolder/?lang=$1 [NC,L,QSA]

因此,上述规则将匹配子文件夹/(任何字母(大写&小)或数字)+,这意味着重复前一个匹配一次或多次,然后使用?有或没有{ {1}}最后,这使得比赛可选。

https://httpd.apache.org/docs/2.4/rewrite/intro.html

注意:清除浏览器缓存然后进行测试。