mod_rewrite不起作用

时间:2013-01-04 13:31:42

标签: .htaccess mod-rewrite web

我有以下页面名称

http://example.co.uk/vehicle.php?size=large

我编写了以下重写规则,因此域名应如下所示

http://example.co.uk/size/large

这是规则

RewriteEngine On
RewriteRule ^size/([a-zA-Z0-9]+)/$ vehicle.php?size=$1

我有两个问题:

  • 首先是它不起作用。事实上它根本不工作。
  • 第二个是如果它确实有效,那么它将删除我不想要的页面名称。我很难在第一时间看到我的错误来修复它,但我希望域名看起来如下:


http://example.co.uk/vehicle/size/large

1 个答案:

答案 0 :(得分:2)

如果您想从/vehicle.php网址重定向到/vehicle/网址,请尝试以下操作:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*?)=(.*?)$
RewriteRule ^vehicle\.php /vehicle/%1/%2? [R=301,L]

至于在干净的URL(如/example.php?foo=bar)上显示非清洁URL的内容(如/example/foo/bar),在尝试同时使用内部(从a到b)时会出现循环重定向问题外部(从b到a)同时重定向。

如果您决定切换到干净的网址,那么我建议您使用/index.php作为所有请求的唯一处理程序,并仅使用mod_rewrite 从旧URL重定向到干净的URL。此外,我通常使用PHP执行大多数操作(通过PHP解析$_SERVER['REQUEST_URI']),并仅使用mod_rewrite将所有请求映射到index.php文件:

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

这是最灵活,最简单,最便携的解决方案。