【问题标题】:How can I rewrite query parameters to path parameters in Apache?如何在 Apache 中将查询参数重写为路径参数?
【发布时间】:2010-11-10 00:57:33
【问题描述】:

我目前有一个网站,我正在尝试在 SEO 方面进行优化。

我的网站使用以下 URL:

domain.com/?app=about

在我的应用程序中,$_GET[app] 设置为“关于”,正如预期的那样。

现在,我想将domain.com/about 之类的网址视为domain.com/?app=about

如何在 Apache .htaccess 文件中执行此操作?

【问题讨论】:

    标签: php apache .htaccess url-rewriting


    【解决方案1】:

    这些被称为RewriteRules,它们相当简单:

    RewriteEngine on
    RewriteRule ^about$ /index.php?app=about
    

    Here's the documentation

    至于让它更通用,怎么样:

    RewriteEngine on
    RewriteRule ^([A-Za-z]+)$ /index.php?app=$1
    

    这将对 /staff 或 /contact 之类的任何请求重定向到 index.php?app=[staff|contact]

    【讨论】:

    • 有没有办法让它更通用,也就是说,为所有应用程序都有一个通用的,而不是为每个应用程序编写一个?
    • +1 - 但是这个例子可以工作,但是如果你有一些东西要重写,你最好使用更通用的解决方案。 ^[^/]$ index.php?app=$1 怎么样?我在那个正则表达式中可能不正确,但总体思路是存在的:P
    【解决方案2】:

    在你的 .htaccess 中使用它

    RewriteEngine on
    RewriteBase /your-site # only if neccessary
    
    RewriteRule ^([^/])$ index.php?app=$1 [R,L]
    

    编辑

    我添加了 L 标志,意味着将其作为最后一条规则进行处理,而 R 标志本身不会更改 URL .. 只是在内部重写。做 R=301 会将浏览器转发到重写的页面,这对调试很有用。

    【讨论】:

    • 它快到了,但似乎出了点问题。 thinkteen.co.uk 试试 /contact 或 /staff :)
    【解决方案3】:

    创建一个获取请求路径的通用 .htaccess 可以使用以下行来完成:

    RewriteRule ^((.+/)+)$ /index.php?path=$1 [L,B]
    

    这将为您提供正确转义的请求路径,因此如果请求的路径是 /hello/world,您将在路径参数中获得 hello%2Fworld。使用 PHP 函数 urldecode() 获取原始格式。

    仅当 url 以 '/' 结尾时才有效。

    注意如果您在同一文件中有其他重写,则应将其放在最后,因为它基本上可以匹配任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多