【问题标题】:Htaccess URL rewrite, Rewrite rule doesn't workHtaccess URL重写,重写规则不起作用
【发布时间】:2018-02-05 15:53:58
【问题描述】:

在 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

【问题讨论】:

标签: .htaccess url url-rewriting


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,可惜没有成功:(
  • 我的网址:mydmain.com/subfolder/?lang=en 我希望这个网址看起来像:mydmain.com/subfolder/en 不幸的是,您的示例不起作用。
  • @LifeIsShort 当我在浏览器的地址栏中键入“mydomain.com/subfolder/en”时,我在 apache 日志中看到它已被重写为 /subfolder/?lang=en
  • 如果我使用像sub.mydmain.com/subfolder/?lang=en这样的子域,这个重写规则会起作用吗
【解决方案2】:

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

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

因此,上述规则将匹配子文件夹/(任何字母(大写和小写)或数字)+,这意味着重复上一次匹配一次或多次,然后在末尾使用? 或不使用/ ,这使得匹配是可选的。

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

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

【讨论】:

    猜你喜欢
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多