【问题标题】:How to rewrite specific URL using htaccess如何使用 htaccess 重写特定的 URL
【发布时间】:2016-09-15 20:07:36
【问题描述】:

我已经为此烦恼了很长一段时间,但我没有看到解决方案。

我想将带有 GET 语言参数的 URL 重写为更简洁的 URL。

例如:

  • http://www.example.com?lang=en

需要:

  • http://www.example.com/en

以上内容适用于此重写规则:

RewriteRule ^(en|nl|fr|de)/?$ /?lang=$1 [L]

但我无法让它在这样的 URL 上工作:

  • http://www.example.com/contact.php?lang=en
  • http://www.example.com/about.php?lang=en

必须是:

  • http://www.example.com/en/contact.php
  • http://www.example.com/en/about.php

任何人知道我的重写规则中缺少什么以使其工作?

【问题讨论】:

    标签: php apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    您将需要一个额外的重写规则来处理/en/about.php

    RewriteEngine On
    
    RewriteRule ^(en|nl|fr|de)/([\w-]+\.php)$ $2?lang=$1 [L,QSA]
    
    RewriteRule ^(en|nl|fr|de)/?$ /?lang=$1 [L,QSA]
    

    【讨论】:

    • 谢谢,你能分解第一个重写规则并解释它的作用吗?它确实使用干净的 URL 返回了正确的页面,但是服务器找不到我的脚本和 css 文件,因为它现在在 /nl/scripts/jquery.js 而不是 /scripts/jquery.js 中查找。蒂亚!
    • 第一条规则,匹配并捕获$1 中的一种语言。此外,它在$2 中使用[\w-]+\.php 表达式在/ 之后捕获about.php。在目标中,我们使用$2?lang=$1 将其转发到about.php?lang=en
    • 要修复 css/js 问题,您需要在页面 HTML 的 <head> 部分下方添加:<base href="/" />
    • 太棒了!而已。奇迹般有效 !非常感谢!
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 2018-06-15
    • 1970-01-01
    • 2020-04-09
    相关资源
    最近更新 更多