Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_Regex_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Php 正在使用.htaccess中多个参数中的一个参数重写url

Php 正在使用.htaccess中多个参数中的一个参数重写url,php,regex,apache,.htaccess,mod-rewrite,Php,Regex,Apache,.htaccess,Mod Rewrite,我在htaccess文件中有以下几行: RewriteCond %{QUERY_STRING} (^|&)grp=([0-9]+)(&|$) RewriteCond %{QUERY_STRING} (^|&)level=([0-9]+)(&|$) RewriteRule ^alpe-adria/([a-zA-Z0-9_-]+)$ /site/index.php?d=1&box=1&grp=%1&grpname=$1&level=%

我在htaccess文件中有以下几行:

RewriteCond %{QUERY_STRING} (^|&)grp=([0-9]+)(&|$)
RewriteCond %{QUERY_STRING} (^|&)level=([0-9]+)(&|$) 
RewriteRule ^alpe-adria/([a-zA-Z0-9_-]+)$ /site/index.php?d=1&box=1&grp=%1&grpname=$1&level=%2 [L]
原始URL包含以下代码:

/site/index.php?d=1&box=1&grp=13&grpname=art-culture&level=1
参数
d
box
是固定的,其他参数
grp
grpname
级别
随页面而变化。我要做的是将此URL重写为以下状态:

/alpe-adria/art-culture
所以问题是,如何选择
grpname
参数并同时使用所有其他参数,这两个参数不是固定的。我尝试了两条
RewriteCond%{QUERY\u STRING}
规则,但没有成功。想法是挑出两个参数,然后在原始URL中使用它们。另一方面,在原始URL中使用一个参数作为替代URL。再一次,我陷入困境,我需要你宝贵的帮助

整个片段:

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{QUERY_STRING} box=
RewriteRule ^alpe-adria$ /site/index.php [L]

RewriteCond %{QUERY_STRING} d=
RewriteRule ^alpe-adria$ /site/index.php [L]

RewriteCond %{QUERY_STRING} op=
RewriteRule ^alpe-adria$ /site/index.php [L]

RewriteCond %{QUERY_STRING} masterSearch=
RewriteRule ^alpe-adria$ /site/index.php [L]

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^alpe-adria/?$ /site/index.php?box=1&d=3 [L]

RewriteCond %{QUERY_STRING} (?:|.*&)grpname=([^&]*)
RewriteRule ^site/index\.php$ /alpe-adria/%1? [L,R]

重新启动发动机
重写cond%{QUERY_STRING}框=
重写规则^alpe adria$/site/index.php[L]
重写cond%{QUERY_STRING}d=
重写规则^alpe adria$/site/index.php[L]
重写cond%{QUERY_STRING}op=
重写规则^alpe adria$/site/index.php[L]
重写cond%{QUERY_STRING}主搜索=
重写规则^alpe adria$/site/index.php[L]
重写cond%{QUERY_STRING}^$
重写规则^alpe adria/?$/site/index.php?box=1&d=3[L]
RewriteCond%{QUERY_STRING}(?:|。*&)grpname=([^&]*)
重写规则^site/index\.php$/alpe adria/%1?[左,右]
你真的有这样一个非SEO非SEF URI来自浏览器吗?将其转换为“阿尔佩·阿德里亚/艺术文化”这样的SEF形式有什么意义?除非您的新目录结构实际上是这样设置的,并且您试图将旧的非SEO/SEF URI与新布局相匹配

假设您确实有传入的“/alpe-adria/*”URI,那么您并没有将原始URL重写为
/alpe-adria/art-culture
。您正在使用.htaccess将
/alpe-adria/art-culture
(来自浏览器)重写为PHP和服务器可以消化的原始格式。请使用正确的术语。htaccess对出站uri不做任何操作


你是说
/alpe-adria/
是固定的,你有一个“搜索引擎友好”的组名(例如,“艺术文化”)。您想将“艺术文化”映射到index.php的URI中吗?我看不到您从传入URI中的grplevel条目的位置。您将能够做的最好的事情就是拥有大量的查找条目:匹配“艺术文化”,输出所需的完整URI。匹配其他内容,输出不同的所需完整URI。

您的问题不太清楚,但您可以使用这样的规则,从查询字符串中的任意位置捕获所有这些
参数grp、grpname和level

RewriteEngine on

RewriteCond %{THE_REQUEST} \s/+site/index\.php\?d=1&box=1&grp=([^&]*)&grpname=([^&]*)&level=([^&]*) [NC]
RewriteRule ^ /alpe-adria/%2/%1/%3? [L,NE,R=302]

RewriteRule ^alpe-adria/([^/]+)/([^/]+)/([^/]+)/?$ /site/index.php?d=1&box=1&grp=$2&grpname=$1&level=$3 [L,QSA]

不错,但是是否可以在没有其他两个参数的情况下重定向到
/alpe-adria/art-culture
?现在显示404错误-找不到站点。可能是因为在这段代码之前,我在htaccess中有更多的代码。看看这个链接--这个问题发生之前我问的问题。所以,我在htaccess文件中的全部代码片段是:上面的编辑问题,因为代码在commentsOk中看起来不好,我想我现在明白了。您希望如何在内部处理
/alpe-adria/art-culture
?我相信应该是
/site/index.php
和一些查询字符串。不,你不应该有那么多重写规则。但为了避免在将内部重定向到pretty URI时丢失重要信息。目前它是:
/alpe-adria/art-culture
,没有关于水平的信息。理想情况下,您的pretty URI方案应该是这样的:
/alpe-adria///
,这将足够好,可以在内部重写,以在单个重写规则中更正URI。