1

我想重写我的 apache mod_rewrite 模式。我用来做以下事情:

RewriteEngine on
RewriteRule /^([^A-Z0-9a-z]+)\.html /search.php?search_id=$1&%{QUERY_STRING}

使用上述规则,我无法得到我所期望的。谁能告诉我的代码有什么问题以及如何解决它。

已编辑。我的要求很简单。如果我输入 /1.html 到 /search.php?search_id=1,我想重定向

而已。

4

3 回答 3

1

这应该有效:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !search\.php
RewriteCond %{REQUEST_URI}  ^/([0-9]+)\.html [NC]
RewriteRule  .*    search.php?search_id=%1    [L,QSA]

静默地图

http://example.com/FileID.html

至:

http://example.com/search.php?search_id=FileID

search.php被认为是固定字符串,而FileID可以是任何数字。

对于永久重定向,替换[L,QSA][R=301,L,QSA]

于 2013-01-30T07:15:00.047 回答
0

您的规则中有错字,请尝试以下操作:

RewriteEngine on
RewriteRule ^/([^A-Z0-9a-z]+)\.html /search.php?search_id=$1&%{QUERY_STRING}

顺便说一句,您也可以尝试使用它:

RewriteRule ^/?([^A-Z0-9a-z]+)\.html /search.php?search_id=$1&%{QUERY_STRING}

这使得前导斜杠是可选的。

于 2013-01-30T06:58:27.603 回答
0

你是在域名后面输入 1.html 吗?也就是说,如果您的域是 example.com,那么您输入 example.com/1.html?如果你正在这样做,那么不要在 .htaccess 文件中的正则表达式之前使用 /。

尝试将以下内容添加到您的主 .htaccess 文件中。它位于包含您网站主页的目录中:

RewriteEngine On
#RewriteBase /
RewriteRule ^([A-Za-z0-9]+)\.html/?$ /search.php?search_id=$1 [NC, L]

我使用 RewriteBase 作为评论。如果您使用共享服务器,请将其保留为注释或删除该行。

编辑: [NC, L] 用来说明,规则的 NC 标志不需要区分大小写(无大小写),如果匹配,则 L 标志用于停止。

于 2013-01-30T07:29:43.870 回答