Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.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 使用多个变量清理URL_Php_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Php 使用多个变量清理URL

Php 使用多个变量清理URL,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我计划接收一些URL。我将使用什么mod rewrite规则对传入URL进行以下转换: http://domain.com/i/ => http://domain.com/index.php http://domain.com/i/b/233223/c/23333 => http://domain.com/index.php?b=233223&c=23333 http://domain.com/i/dd/9844kjhf/fj/djP756/ee/kjhKJH =&g

我计划接收一些URL。我将使用什么mod rewrite规则对传入URL进行以下转换:

http://domain.com/i/ => 
http://domain.com/index.php

http://domain.com/i/b/233223/c/23333 => 
http://domain.com/index.php?b=233223&c=23333

http://domain.com/i/dd/9844kjhf/fj/djP756/ee/kjhKJH => 
http://domain.com/index.php?dd=9844kjhf&fj=djP756&ee=kjhKJH

http://domain.com/r/ => 
http://domain.com/restore.php

http://domain.com/w/place/chicago =>
http://domain.com/withold.php?place=chicago

http://domain.com/w/ =>
http://domain.com/withold.php

基本上,域后的第一部分对应于一个页面,其余部分是要传递的任意数量的参数集。

由于URL中的参数数量不限,因此最好在应用程序中创建一个脚本来解析它们

您可以使用.htaccess将所有输入请求定向到路由文件,例如index.php

Options -MultiViews
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

然后运行类似于解析URL的操作

,因为URL中可能有无限数量的参数,最好在应用程序中创建一个脚本来解析它们

您可以使用.htaccess将所有输入请求定向到路由文件,例如index.php

Options -MultiViews
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
然后运行类似于解析URL的操作

尝试:

# If the URI is just /i/, rewrite to index.php
RewriteRule ^i/?$ /index.php [L]

# If the URI is /i/ plus some paths, rewrite the paths into query string and let rewrite engine loop
RewriteRule ^i/([^/]+)/([^/]+)(/?.*)$ /i$3?$1=$2 [L,QSA]
这将使用设置为的路径节点数,默认情况下为10。这意味着默认情况下,您最多可以有9组参数,除非您超出此限制。因此:

http://example.com/i/a/1/b/2/c/3/d/4/e/5/f/6/g/7/h/8/j/9
将首先匹配第2条规则,然后继续循环:

1. /i/b/2/c/3/d/4/e/5/f/6/g/7/h/8/j/9?a=1
2. /i/c/3/d/4/e/5/f/6/g/7/h/8/j/9?b=2&a=1
3. /i/d/4/e/5/f/6/g/7/h/8/j/9?c=3&b=2&a=1
4. /i/e/5/f/6/g/7/h/8/j/9?d=4&c=3&b=2&a=1
etc.
直到最后你被留下来

/i?j=9&h=8&g=7&f=6&e=5&d=4&c=3&b=2&a=1
第一条规则得到应用,你最终应该得到:

/index.php?j=9&h=8&g=7&f=6&e=5&d=4&c=3&b=2&a=1
尝试:

这将使用设置为的路径节点数,默认情况下为10。这意味着默认情况下,您最多可以有9组参数,除非您超出此限制。因此:

http://example.com/i/a/1/b/2/c/3/d/4/e/5/f/6/g/7/h/8/j/9
将首先匹配第2条规则,然后继续循环:

1. /i/b/2/c/3/d/4/e/5/f/6/g/7/h/8/j/9?a=1
2. /i/c/3/d/4/e/5/f/6/g/7/h/8/j/9?b=2&a=1
3. /i/d/4/e/5/f/6/g/7/h/8/j/9?c=3&b=2&a=1
4. /i/e/5/f/6/g/7/h/8/j/9?d=4&c=3&b=2&a=1
etc.
直到最后你被留下来

/i?j=9&h=8&g=7&f=6&e=5&d=4&c=3&b=2&a=1
第一条规则得到应用,你最终应该得到:

/index.php?j=9&h=8&g=7&f=6&e=5&d=4&c=3&b=2&a=1

您是否已经尝试过wit.htaccess?是的,想法是使用htaccess,但我遇到的问题是使用域后的第一部分对应于htaccess数组中指定的任意数量的页面??您是否已经尝试过wit.htaccess?是的,想法是使用htaccess,但我遇到的问题是使用域后的第一部分对应于htaccess数组中指定的任意数量的页面??我想知道在htaccess文件中有多个情况是否会有所帮助-1个参数,2个参数,3个参数,4个参数并避免路由文件这样做可能会奏效:你可以这样做,但如果你想要20个参数呢?然后你必须重写mod_重写规则。是的。我得到了一个答案,但最多只有5个参数和1个页面名称,大约有7行。我想知道在htaccess文件中有多个案例是否会有帮助-1个参数、2个参数、3个参数、4个参数,并避免路由文件这样做可能行得通:你可以这样做,但如果你想要20个参数呢?然后你必须重写mod_重写规则。是的。我得到了一个答案,但最多只有5个参数和1个页面名,大约7行。这是可行的,thx,但是如果指定了一个新页面,而不是/I/b2/c3,那么会发生什么呢?有/newfile/b2/c3?@Adrian33,那么您需要将这两个规则中的I/更改为newfile/。这是可行的,thx,但是如果指定了一个新页面,会发生什么,如果没有/i/b2/c3,而是有/newfile/b2/c3?@Adrian33,那么您需要将这两个规则中的i/to newfile/更改为