0

我有一些关于在 php 中重写 url 的问题要问。

1- www.test.com/index.php?name=123 到 www.test.com/123

2- www.test.com/folder1/index.php?name=123 到 www.test.com/folder1/123/index.php

关于我在数字 1 上的编码,但我不知道如何用数字 1 重写数字 2 组合:

RewriteEngine on
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond  %{REQUEST_FILENAME} !-d
RewriteRule  ^(.*)$ index.php?usname=$1 [QSA,L]
4

2 回答 2

1

当您说“在 php 中重写 url”时,我假设“在 php 中”是指应用程序的语言,而不是重写/重定向方法 --- 因为您的示例代码由 Apache 指令组成。

以下规则会将 test.com/folder1/index.php?name=123 形式的 URL 更改为 test.com/folder1/123 形式的“漂亮” URL(我删除了 'index.php'更人性化)。

  1. 重定向丑陋的查询 URL,以便用户始终看到“漂亮”的 URL

    RewriteCond  %{QUERY_STRING} \bname=([^&]+)
    RewriteRule  ^/?folder1/index\.php$ /folder1/%1 [R=302]
    
  2. 告诉服务器如何解释漂亮的 URL

    RewriteRule  ^/?folder1/([^\/]+)(/index\.php)?$ /folder1/index.php?name=$1 [L]
    

注意: 上面的第一条规则使用 302(临时)重定向,因此您的浏览器在测试和调整它们时不会“记住”重定向规则。如果您关心 SEO,请将 更改[R=302][R=301],这是一个永久重定向。

于 2012-10-19T13:50:47.857 回答
0

试试这个:

RewriteEngine on
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond  %{REQUEST_FILENAME} !-d
RewriteRule  ^(.*)/([0-9]+)/index.php $1/index.php?name=$2 [QSA,L]
RewriteRule  ^(.*)$ index.php?usname=$1 [QSA,L]

重写规则末尾的 [L] 指令表示如果规则匹配,则结束对 .htaccess 的解析。

因此,您必须将规则放在您的规则之前 ^(.*)$ 处理每种情况

于 2012-10-19T13:19:53.520 回答