0

我没有使用正则表达式的经验,并且尝试了一些工具等技巧,但没有得到一个强大的解决方案。

这是我想要实现的目标。即将到来的请求可以采用以下格式:

http://whatever.com/search/s-<value>/i-<i value>/e-<e value>?query=<query value>&query1=<query1 value>

http://whatever.com/list/s-<value>/i-<i value>/e-<e value>?query=<query value>&query1=<query1 value>

使用 mod_rewrite 我想将其转换为 -

http://whatever.com/index.php?type=search&iid=<i value>&edd=<e-value>&query=<query value>&query1=<query1 value>

http://whatever.com/index.php?type=list&iid=<i value>&edd=<e-value>&query=<query value>&query1=<query1 value>

注意:i-、e-等的位置可能出现在同一个位置,也可能不出现。而且,并非所有请求都有它。

4

4 回答 4

1
RewriteEngine On

RewriteRule ^([^/]*)$   index.php?type=$1 [L,QSA]
RewriteRule ^([^/]*)/(.)-([^/]*)$   index.php?type=$1&$2id=$3 [L,QSA]
RewriteRule ^([^/]*)/(.)-([^/]*)/(.)-([^/]*)$   index.php?type=$1&$2id=$3&$4id=$5 [L,QSA]
RewriteRule ^([^/]*)/(.)-([^/]*)/(.)-([^/]*)/(.)-([^/]*)$   index.php?type=$1&$2id=$3&$4id=$5&$6id=$7 [L,QSA]

这里

 i-value is in $_GET['iid']
 s-value is in $_GET['sid']
 e-value is in $_GET['eid']

$_GET['query']
$_GET['query1']

也提供。

于 2012-12-26T10:24:47.857 回答
0

Try this in .htaccess file

<IfModule mod_rewrite.c>
  RewriteEngine on
  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

Just go to your index.php file then print $_GET variable, Do your stuffs there.

You will get path name in $_GET['q']. Then you can routing the request appropriate file or function.

于 2012-12-26T11:00:56.473 回答
0

您可以通过将 htaccess 文件放入根目录中来尝试:

RewriteEngine on
RewirteRule ^search/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)?query=<query value>&query1=<query1 value> index.php?type=search$iid=$2&edd=$3&query={QUERY_STRING} 

您可以根据您的 url 参数使用下面的参数(我假设它可能是字符和数字):

1) [a-zA-Z0-9] for char + numbers
2) [a-zA-Z] for char
3) [0-9] for numbers 
于 2012-12-26T10:24:07.123 回答
-1

阅读有关 PCRE(Perl 兼容正则表达式)的 PHP 文档。

PCRE 上的 PHP 文档是网络上最好的。不要费心使用工具。

于 2012-12-26T10:00:07.350 回答