Php Modrewrite未发送$\u GET参数
我正在尝试重写我的URL:Php Modrewrite未发送$\u GET参数,php,.htaccess,url-rewriting,get,Php,.htaccess,Url Rewriting,Get,我正在尝试重写我的URL: RewriteEngine On RewriteBase / RewriteRule ^help/(.+)/(.+) help.php?helpid=$2 RewriteRule ^city/(.+)/(.+) city.php?cityid=$2 即使url包含预期的格式: 看来 isset($\u GET['helpid'])将始终在help.php中激发false 通常这个系统对我有效。这里有我遗漏的东西吗 -编辑- 正如我所看到的,这应该是可行的(或者至少
RewriteEngine On
RewriteBase /
RewriteRule ^help/(.+)/(.+) help.php?helpid=$2
RewriteRule ^city/(.+)/(.+) city.php?cityid=$2
即使url包含预期的格式:
看来
isset($\u GET['helpid'])
将始终在help.php中激发false
通常这个系统对我有效。这里有我遗漏的东西吗
-编辑-
正如我所看到的,这应该是可行的(或者至少你们中的一个答案),我正在为这个问题添加更多的代码:
完整的.htaccess内容
RewriteEngine On
ErrorDocument 500 /oohps.php
ErrorDocument 404 /oohps.php
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
RewriteBase /
RewriteRule ^help/([^/]+)/([^/]+) help.php?helpid=$2 [QSA]
RewriteRule ^city/([^/]+)/([^/]+) city.php?cityid=$2 [QSA]
RewriteRule ^login$ login.php
乞求帮助.php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', '1');
$_GET['noseo'] = true;
include('htmlhead.php');
/* Leemos la id del grupo*/
$selected;
if(isset($_GET['helpid'])){
$selected = $_GET['helpid'];
}else {
echo '<script>alert("Modrewrite fails. Id is missing, id: '.$_GET['helpid'].'");location.href = "/"</script>'; /* Allways returns this*/
}
session_start();
错误报告(E_全部);
ini_集('display_errors','1');
$\u GET['noseo']=true;
包括('htmlhead.php');
/*格鲁波之家酒店*/
$selected;
如果(isset($\u GET['helpid'])){
$selected=$_GET['helpid'];
}否则{
echo'alert(“Modrewrite失败。缺少Id,Id:”。$\u GET['helpid']”;location.href=“/”;/*始终返回此消息*/
}
有两个变量的原因吗?不过,这是可行的:
RewriteEngine On
RewriteBase /
RewriteRule ^help/([^/\.]+)/([^/\.]+)/?$ help.php?helpid=$2 [L]
RewriteRule ^city/([^/\.]+)/([^/\.]+)/?$ city.php?cityid=$2 [L]
使用[QSA]
应该可以转发GET参数。另外,将+
(贪婪)更改为[^/]+
(表示任何不是斜杠重复1次或多次的字符),应该可以解决您的问题
RewriteRule ^help/([^/]+)/([^/]+) help.php?helpid=$2 [QSA]
RewriteRule ^city/([^/]+)/([^/]+) city.php?cityid=$2 [QSA]
也可以将其缩短为以下内容:
RewriteRule ^(help|city)/([^/]+)/([^/]+) $1.php?$1id=$3 [QSA]
:
当替换URI包含查询字符串时,RewriteRule的默认行为是丢弃现有查询字符串,并用新生成的查询字符串替换它。使用[QSA]标志会导致组合查询字符串
考虑以下规则:
重写规则/pages/(.+)/page.php?page=$1[QSA]
使用[QSA]标志,对/pages/123?one=two的请求将映射到/page.php?page=123&one=two。如果没有[QSA]标志,相同的请求将被映射到/page.php?page=123——也就是说,现有的查询字符串将被丢弃
正则表达式过于贪婪,第一个+
也与斜杠匹配,导致正则表达式的其余部分失败。[^/]+
正则表达式将匹配除斜杠以外的任何内容
RewriteRule ^help/([^/]+)/([^/]+) help.php?helpid=$2
RewriteRule ^city/([^/]+)/([^/]+) city.php?cityid=$2
您可以在根目录中的.htaccess文件中尝试此操作:
Options+FollowSymlinks-多视图
重新启动发动机
重写基/
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写条件%{REQUEST_URI}^/([^/]+)/[^/]+/([^/]+)/?[北卡罗来纳州]
重写规则。*%1.php?%1id=%2[L]
重定向
http://domain.com/par1/anything/par2
带或不带尾随斜杠
到
http://domain.com/par1.php?par1id=par2
字符串par1
、anything
和par2
被认为是动态的,根据问题中的示例,par1
是PHP脚本的名称,也是重定向查询中键的第一部分
par1
=帮助时的示例:
重定向:
http://domain.com/help/the-irelevant-title/5/
致:
http://domain.com/help.php?helpid=5
对于永久重定向,请将[L]
替换为[R=301,L]
虽然我没有测试其他规则,也不知道它们是否按预期工作,但问题中的.htaccess文件应按如下方式修改,以将规则集包含在此答案中:
Options+FollowSymlinks-多视图
重新启动发动机
ErrorDocument 500/oohps.php
ErrorDocument 404/oohps.php
重写cond%{HTTP_HOST}^www.domain.com[NC]
重写规则^(.*)$http://domain.com/$1[L,R=301]
重写基/
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写条件%{REQUEST_URI}^/([^/]+)/[^/]+/([^/]+)/?[北卡罗来纳州]
重写规则。*%1.php?%1id=%2[L]
#下一行是防止循环的建议添加。
重写cond%{REQUEST_URI}!登录\.php[NC]
重写规则^login$login.php[L]
是,第一个变量是到期SEO。我知道我只需要id,但是的,在这种情况下,我需要它为URL相关的关键字进行编辑,以满足您的需要。不过,其他人已经给出了基本相同的答案。不确定,在我这方面似乎没问题?更好的处理seo类型内容的方法是重写规则^help/([^/\.]+)/?$help.php?helpid=$2[L],然后通过/help/53这样的方式调用脚本-这是标题,然后分解-获取id或CakePHP之类的框架支持此NativeyQSA不适用,他的初始url似乎没有查询字符串。他试图从/help/foo/bar转到/help.php?helpid=bart。QSA标志用于将现有查询附加到重写的url,它会将/help/title/5/?param=1转换为help.php?helpid=5¶m=1。您不必处理查询。这很有用,但不是这里的正确答案。@SamDufel我现在意识到了这一点,并在你写答案之前更新了我的OP,以说明这只是供其他人在谷歌上搜索同一个问题。我喜欢这个“重写规则^(help | city)/([^/]+)/([^/]+)$1.php?$1id=$3[QSA]+1还可以使用非贪婪量词:^help/(.+?)/(.+)
。请确保禁用多视图,否则Apache可能会在不使用mod_重写的情况下将/help/映射到help.php。实际上,只需添加“选项+FollowSymlinks-MultiViews”就可以解决问题。非常感谢!不客气。我认为这是缺少的,可能是问题的原因,但我还将这两条规则组合成了一条规则一个。也许那样做会更好,也更通用。