【问题标题】:.htaccess ModRewrite with 2 parameters.htaccess ModRewrite 带 2 个参数
【发布时间】:2021-08-16 05:13:24
【问题描述】:

@anubhava 为我之前使用以下代码进行 .htaccess 内部重写的问题提供了一个很好的答案,该代码适用于我的一个搜索查询。


RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule ^file\.php$ /directory/%1? [R=301,L,NC]

RewriteRule ^directory/(\d+)/?$ /directory/file.php?id=$1 [L,QSA,NC]

我想将此作为一个单独的问题,因为我的下一个问题略有不同。我怎样才能使其适应两个参数?例如,我还希望 http://ipaddress/directory/file.php?id=47?name=value1 重定向到 http://ipaddress/directory/47/value1 name= 也可以是字母和数字的任意组合,如 value1050 等。

感谢@anubhava您之前的回答,也许还有办法添加这个第二个参数

【问题讨论】:

  • 您不能在查询字符串中传递 2 个? 可能需要使用& 在查询字符串中添加多个参数

标签: .htaccess redirect mod-rewrite url-rewriting friendly-url


【解决方案1】:

考虑到您正在以id=1234&name=value123 样式分离查询字符串值,因为不允许传递 2 次查询字符串,那么您可以尝试以下,修复您显示的尝试。

RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^id=(\d+)&name=(.*)$ [NC]
RewriteRule ^file\.php/?$ /directory/%1/%2? [R=301,L,NC]

RewriteRule ^directory/(\d+)/(.*)/?$ /directory/file.php?id=$1&name=$2 [L,QSA,NC]


第二个解决方案:在此处再添加 1 个解决方案,请使用以上解决方案或一次仅使用以下解决方案。

RewriteEngine on
RewriteCond %{THE_REQUEST} \s/file\.php\?d=(\d+)&name=(\S+)\s [NC]
RewriteRule ^ /directory/%1/%2? [R=301,L]
RewriteRule ^directory/(\d+)/(.*)/?$ /directory/file.php?id=$1&name=$2 [NC,L,QSA]

【讨论】:

  • 第二种解决方案似乎部分有效。但是,重写后 CSS 不会在页面上呈现。
  • 没关系,这是我的 CSS 问题!是否可以将其调整为也接受网址末尾的 / ?那么如果用户决定添加反斜杠呢?喜欢http://ipaddress/directory/47/value1/
  • @ccc,您的意思是要将 url http://localhost:80/directory/file.php?id=47?name=value1 更改为 http://localhost:80/directory/47/value1/?请确认一次。
  • 我的意思是,如果我有一个 / 到 url 的末尾,那么根本不会请求任何数据。所以我想知道是否可以为 / 是否包含在 url 末尾添加一个例外。
  • @ccc,您可以在 RewriteEngine on 选项之前尝试 Directoryindex off 选项。这里已经很晚了,我在手机上所以无法测试它,尝试一次。
猜你喜欢
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多