是否可以在.htaccess
中进行奇数甚至替换,以使用/
替换网址中的= &
?
换句话说,我有一个像这样的链接:
page/subscriber/action/manage/sortby/id
我想知道是否可以简单地将奇数编号/
替换为=
而将偶数/
替换为&
?
我有一些很长的有很多参数的网址,我不想为每个网址写一个特定的规则。
我正在尝试将非常大的PHP脚本转换为格式良好的网址,并且需要数周才能找到所有可能的网址和参数组合。
答案 0 :(得分:6)
为什么不想在PHP脚本中创建它?我想我在Zend框架中第一次看到了这个,但现在在我的项目中使用了类似的方法。
htaccess的:
RewriteEngine on
RewriteRule .* index.php
的index.php
$path = $_SERVER['REQUEST_URI'];
$paths = explode('/', $path);
// Add some logic for showing the page you need. Maybe remove domain before processing
例如,您可以将偶数参数用作数组键,并将参数添加为这些键的值。
e.g。要打印路径,请使用
echo "<pre>";
print_r ($paths);
echo "</pre>";
答案 1 :(得分:2)
您可以使用两个规则使用纯mod_rewrite执行此操作。此解决方案重复将规则应用于URL,直到没有任何内容重写它。此解决方案受到httpd.conf
允许的内部重写循环数量的限制。我相信,默认情况下,这是10'递归'。这意味着您可以在获得 500内部错误之前重写最多10个键值对。如果您需要更多这些内容,请考虑在LimitInternalRecursion
中增加httpd.conf
(docs)的值。请记住,您需要重新启动httpd服务才能使此更改生效。
如果您在网址中提供了偶数的“参数”(例如site.uri/a/b/c/d
),则会将其重写为site.uri/somethingcustom.php?a=b&c=d
。如果您在网址中提供了奇数个“参数”(例如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
标志(查询字符串追加)。这会将提供的查询字符串附加到上一个查询字符串(在这种情况下非常有用)。请参阅the docs。
RewriteRule ^(.*)/([^/]+)/([^/]+)/?$ /$1?$2=$3 [QSA]
RewriteCond %{REQUEST_URI} !^/path/to/somethingcustom\.php$
RewriteRule ^([^/]*)/([^/]*)$ /path/to/somethingcustom.php?$1=$2 [QSA]
有关mod_rewrite的一般信息,请参阅the mod_rewrite docs。
请注意,此方法要求Apache多次执行.htaccess
。如果将规则放在.htaccess
文件的顶部并使用L
标志,则解决方案将更有效。