是否可以在 url 中进行奇偶替换.htaccess
以替换/
url = &
?
换句话说,我有一个这样的链接:
page/subscriber/action/manage/sortby/id
我想知道是否有办法简单地将奇数/
替换为=
偶数?/
&
我有一些很长的 url 有很多参数,我不想为每个参数写一个特定的规则。
我正在尝试将一个非常大的 PHP 脚本转换为格式良好的 url,并且需要数周时间才能找到每个可能的 url 和参数组合。
你为什么不想在 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>";
您可以使用两个规则使用纯 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/b
,site.uri/path/to/categories.php?a=b
通过重写categories
到path/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
标志,则解决方案将更有效。