3

是否可以在 url 中进行奇偶替换.htaccess以替换/url = &

换句话说,我有一个这样的链接:

page/subscriber/action/manage/sortby/id

我想知道是否有办法简单地将奇数/替换为=偶数?/&

我有一些很长的 url 有很多参数,我不想为每个参数写一个特定的规则。

我正在尝试将一个非常大的 PHP 脚本转换为格式良好的 url,并且需要数周时间才能找到每个可能的 url 和参数组合。

4

2 回答 2

6

你为什么不想在 PHP 脚本本身中制作它?我想我是第一次在 Zend 框架中看到这一点,但现在在我的项目中使用了类似的方法。

.ht 访问:

RewriteEngine on
RewriteRule .* index.php

索引.php

$path = $_SERVER['REQUEST_URI'];
$paths = explode('/', $path);
// Add some logic for showing the page you need. Maybe remove domain before processing

例如,您可以使用偶数参数作为数组键,并添加参数作为这些键的值。

例如打印路径,使用

echo "<pre>";
print_r ($paths);
echo "</pre>";
于 2013-10-02T06:52:22.803 回答
2

您可以使用两个规则使用纯 mod_rewrite 执行此操作。此解决方案重复地将规则应用于 url,直到没有任何东西可以重写它。此解决方案受限于您允许通过的内部重写循环的数量httpd.conf。我相信,默认情况下,这是 10 次“递归”。这意味着在收到500 Internal Error之前,您最多可以重写 10 个键值对。如果您需要更多这些,请考虑增加LimitInternalRecursion( docs ) in的值httpd.conf。请记住,您需要重新启动 httpd-service 才能使此更改生效。

如果您在 url 中提供偶数的“参数”(例如site.uri/a/b/c/d),它会将其重写为site.uri/somethingcustom.php?a=b&c=d. 如果您在 url 中提供奇数数量的“参数”(例如site.uri/index.php/a/b/c/d),它会将其重写为site.uri/index.php?a=b&c=d. 在参数数量奇数的情况下,您可以使用另一条规则将剩余的“事物”(在我的示例中index.php)重写为实际路径(例如site.uri/categories/a/bsite.uri/path/to/categories.php?a=b通过重写categoriespath/to/categories)。这样的规则必须写在以下两条规则之后。

该解决方案使用QSA标志(查询字符串追加)。这会将提供的查询字符串附加到前一个查询字符串(在这种情况下非常有用)。请参阅文档

RewriteRule ^(.*)/([^/]+)/([^/]+)/?$ /$1?$2=$3 [QSA]

RewriteCond %{REQUEST_URI} !^/path/to/somethingcustom\.php$
RewriteRule ^([^/]*)/([^/]*)$ /path/to/somethingcustom.php?$1=$2 [QSA]

有关 mod_rewrite的一般信息,请参阅mod_rewrite 文档。


请注意,此方法需要 Apache 执行.htaccess多次。.htaccess如果将规则放在文件顶部并使用L标志,则解决方案将更有效。

于 2013-10-02T08:30:06.360 回答