htaccess如何将两个查询字符串转换为一个url

时间:2012-05-08 07:13:36

标签: php mysql apache mod-rewrite url-rewriting

  Options +FollowSymlinks
  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME}\.php -f
  RewriteRule ^news/([^/]+)  /casino2/newsdetail.php?newsid=$1 [NC]

当前使用上述代码汇总http://localhost/casino2/newsdetail.php?newsid=3 http://localhost/casino2/news/3现在问题是我试图从两个查询字符串中创建一个url,例如url是localhost/casino2/newsdetail.php?newsid=3& pagename=article网址应为localhost/casino2/news/article是否可以这样做?

1 个答案:

答案 0 :(得分:0)

首先,这些规则似乎与您所说的相反 - 即他们将“/ localhost / casino2 / news / 4711”重写为“/casino2/newsdetail.php?newsid=4711”。

如果这是你真正的意思,你需要做的是将两个项目保存到两个变量中,而不是只将一个变量保存到一个变量中,如下所示:

RewriteRule ^news/([^/]+)/([^/]+)  /casino2/newsdetail.php?newsid=$1&pagename=$2 [NC]

如果newsid始终为1,那么您不需要将其传递给php,只需在替换中创建它,就像这样

RewriteRule ^news/([^/]+)  /casino2/newsdetail.php?newsid=1&pagename=$1 [NC]

这会产生以下重写:

/ news / article - > /casino2/newsdetail.php?newsid=1&pagename=article / news / somethingelse - > /casino2/newsdetail.php?newsid=1&pagename=article

但是如果你想能够选择不同的新闻,你需要在某个地方传递它 - 作为URL的一部分或作为查询字符串。

为了清楚起见,规则的应用方式是

RewriteRule "What the URL looks like in the browser" "What my web server expects" 

如果您遇到问题,我强烈建议您开启大量调试日志,这将是一个很好的帮助。相关的配置行是

RewriteLog /path/to/logfile
RewriteLogLevel 3