没有id的重写URL,或者通过传递id重写标题

时间:2012-09-22 16:43:03

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

我的实际网址如下:

http://mydomain.com/example.php?id=value1&name=value2

对我来说理想的是:

http://mydomain.com/example/value2

我不想显示商品ID。我用谷歌搜索了几个小时,但没有找到任何有用的东西。 我想传递id但不想在URL中显示它。这样的事情可能吗? 我可以在客户端加载页面之后以某种方式重写URL吗?

如果我必须发送id,那我怎么能重写名称值,按照id? 因此,如果我在名称字段中键入与具有指定id的项目无关的内容,则在响应时,我将获取与id关联的名称的实际值。 所以这就是我的意思:

  • 实际的ulr是:http://mydomain.com/example/123
  • 我输入的内容:http://mydomain.com/randomtext/123
  • 我仍然得到回复:http://mydomain.com/example/123

就像这里:http://www.theatlantic.com/magazine/archive/1939/03/what-makes-an-american/309021/ 如果您将what-makes-an-american更改为任意随机文字,您仍会转到同一页面。 他们使用重定向吗?这对加载时间有害吗?

2 个答案:

答案 0 :(得分:1)

不,它对负载时间无害

<IfModule mod_rewrite.c>
RewriteEngine On
# /var1/value2.html to /example.php?id=value1&name=value2
RewriteRule ^([^/]+)/([^\.]+)\.html$ /example.php?id=$1&name=$2
</IfModule>

答案是here

答案 1 :(得分:0)

将此保存为.htaccess文件:

RewriteEngine On
RewriteBase /

RewriteCond $1 !^index\.php
RewriteRule ^(.*)/$ index.php/$1 [L,QSA,NC]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [QSA,L]

然后,您可以使用REQUEST_URI服务器变量来检索URL组件。

例如,使用http://mydomain.com/example/value2

$var = split('/', $_SERVER['REQUEST_URI']);

$var becomes array('example', 'value2');