Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 动态解析.htaccess中的URL_Php_.htaccess - Fatal编程技术网

Php 动态解析.htaccess中的URL

Php 动态解析.htaccess中的URL,php,.htaccess,Php,.htaccess,是否可以在.htaccess中进行奇偶替换,以将url中的/替换为=& 换句话说,我有这样一个链接: page/subscriber/action/manage/sortby/id 我想知道是否有办法简单地用=替换奇数的/,用&替换偶数的/ 我有一些URL非常长,有很多参数,我不想为每一个都写一个特定的规则 我正在尝试将一个非常大的PHP脚本转换为格式良好的url,要找到每个可能的url和参数组合需要几周的时间。为什么不在PHP脚本中实现呢?我想我第一次在Zend框架中看到了这一点,但现在在我的

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

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

page/subscriber/action/manage/sortby/id

我想知道是否有办法简单地用
=
替换奇数的
/
,用
&
替换偶数的
/

我有一些URL非常长,有很多参数,我不想为每一个都写一个特定的规则


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

为什么不在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>";
echo”“;
打印(路径);
回声“;

您可以通过使用两条规则进行纯mod_重写来实现这一点。此解决方案会重复将规则应用于url,直到没有任何内容可以重写它。此解决方案受到通过
httpd.conf
允许的内部重写循环数量的限制。我相信,默认情况下,这是10个“递归”。这意味着您可以在出现500个内部错误之前重写多达10个键值对。如果您需要更多的代码,请考虑在<代码> HTTPD.CONF中增加<代码> LimITIONALL递归< <代码>()的值。请记住,要激活此更改,您需要重新启动httpd服务

如果您在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
标志(查询字符串追加)。这将把提供的查询字符串附加到前面的查询字符串(在这种情况下非常有用)。看

有关mod_重写的一般信息,请参阅



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

您是否可以使用Yii?因此
http://site.com/page/subscriber/action/manage/sortby/id
应该变成
http://site.com/page=subscriber&action=manage&sortby=id
?您确定不想使其成为具有有效查询字符串的URI:
http://site.com/?page=subscriber&action=manage&sortby=id
??
RewriteRule ^(.*)/([^/]+)/([^/]+)/?$ /$1?$2=$3 [QSA]

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