Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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
Regex 如何通过htaccess插入部分url_Regex_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Regex 如何通过htaccess插入部分url

Regex 如何通过htaccess插入部分url,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我有这样的旧URL: http://example.com/news/newscategory/77654 它应该被重写为这个URL结构: http://example.com/news/newscategory/id/77654 所以这里的新闻是静态的,因为它是文件夹。新闻类别可以是其他类别(多个类别)。我想将用户(301)重定向到id为/part的新url 我通过php获取url,其中新闻是键,新闻类别是值,id是键,最后的数字也是值 我正在使用此htaccess进行以下操作: <

我有这样的旧URL:

http://example.com/news/newscategory/77654
它应该被重写为这个URL结构:

http://example.com/news/newscategory/id/77654
所以这里的新闻是静态的,因为它是文件夹。新闻类别可以是其他类别(多个类别)。我想将用户(301)重定向到id为/part的新url

我通过php获取url,其中新闻是键,新闻类别是值,id是键,最后的数字也是值

我正在使用此htaccess进行以下操作:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
</IfModule>

重新启动发动机
RewriteCond%{REQUEST_FILENAME}-s[或]
RewriteCond%{REQUEST_FILENAME}-l[或]
RewriteCond%{REQUEST_FILENAME}-d
重写规则^.*$-[NC,L]
重写规则^.*$index.php[NC,L]
然后我使用一些php库来获取这些值

编辑:我要问的是,我想将用户从第一个url重定向到第二个url,以便获取id

第一个链接已经开始工作了,但我仍然有指向旧url结构的链接,该结构导致类别视图。实时URL:

旧结构:

新结构:


旧链接应将用户重定向到新链接。

如果我理解正确,请尝试此规则

RewriteRule ^([.*])/([.*])/([.*])/([.*])$ index.php?$1=$2&$3=$4
如果遗漏了什么,请解释

编辑

好的,根据你的说法,新闻和id是静态的,但是它们的值是动态的,请尝试下面的规则

RewriteRule ^(news)/([.*])/(id)/([.*])$ index.php?news=$1&id=$2
您可以使用:

RewriteEngine On

# add /id/ in /news/... URLS
RewriteRule ^(news/[^\w-]+)/(\d+)$ /$1/id/$2 [R=301,L,NC]

# front controller rule    
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

谢谢你的回答。这是重定向/1/2/3/4/到常规获取url。我需要的是将用户从重定向到,以便获取id参数。网站的旧代码使用的是没有id的url结构,而新代码使用的是id。因此,当用户访问旧url时,他不会获得单个新闻项目,而是不会将类别作为id作为值传递。我的htaccess/php代码让我可以选择/key/value/key/value/url,我想使用它。类似这样的代码:但在我的例子中,RewriteRule
^([^/]+)/(.+)$/$1/$2/id[R=301,L]
id被添加到最后一部分url之前。我对正则表达式很不熟悉:(@Abhishekgurjar,你觉得
([.]
是否匹配?您是在请求帮助编写Apache重写规则,将
新闻类别
和数字id转换为index.php的GET变量,还是在寻求帮助编写解析原始查询字符串的php组件?您的问题似乎并没有问出实际问题,而您已经包含了som在Apache配置中,您没有包括和代码,也没有解释您遇到的问题或您希望在哪里结束。请添加这些重要的部分。