1

我有以下页面名称

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
4

1 回答 1

2

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

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

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

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

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

这是最灵活、直接和便携的解决方案。

于 2013-01-04T13:37:12.673 回答