Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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 301动态url重定向到新的动态url_Php_Apache_.htaccess_Redirect_Dynamic Url - Fatal编程技术网

Php 301动态url重定向到新的动态url

Php 301动态url重定向到新的动态url,php,apache,.htaccess,redirect,dynamic-url,Php,Apache,.htaccess,Redirect,Dynamic Url,首先,我试图在主题中找到解决方案,但没有找到与我的问题相近的东西,所以我决定在这里提问。对于htacces和动态重定向,我是初学者,所以我希望能从您的帮助中了解更多 我需要用htaccess中的301重定向将旧的动态url重定向到新的url格式 我有db和城市列表,格式如下: 我想将我的URL更改为新格式,如下例所示: 我的数据库中有300多个城市,我想用301重定向自动将旧URL重定向到新格式,所以我不必在htaccess中为每个城市键入手动301重定向 当前访问权限: 重新启动发动机 重

首先,我试图在主题中找到解决方案,但没有找到与我的问题相近的东西,所以我决定在这里提问。对于htacces和动态重定向,我是初学者,所以我希望能从您的帮助中了解更多

我需要用htaccess中的301重定向将旧的动态url重定向到新的url格式

我有db和城市列表,格式如下:

我想将我的URL更改为新格式,如下例所示:

我的数据库中有300多个城市,我想用301重定向自动将旧URL重定向到新格式,所以我不必在htaccess中为每个城市键入手动301重定向

当前访问权限: 重新启动发动机

重写规则^city/([-]?[0-9]+)([-\][^/]*)? index.php?view=main&cityid=$1[QSA]


对不起,我的英语不是最好的:)


提前感谢。

您可以尝试以下重定向:


重定向301/city/1_NewYork//1_NewYork/

您可以使用
RedirectMatch
进行此操作

RedirectMatch 301 /city/(.*) /$1
并将重写规则替换为

RewriteRule ^([-]?[0-9]+)([-_][^/]*)? index.php?view=main&cityid=$1 [QSA]

请参见

您可以先使用此规则作为第一条规则,然后再使用其他规则:

RewriteEngine On

RewriteRule ^city/([^/]+)/?$ /$1 [L,NC,R=302]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/?$ index.php?view=main&cityid=$1 [L,QSA]

您是否尝试过删除
重写规则
中的
city/
部分?可能我没有解释清楚,将url格式更改为我想要的格式并使其正常工作并没有问题。问题是当我这样做时,旧的url将指向404错误页面,我想用301将用户重定向到正确的新url页面,这样我就不会在google上遇到问题并丢失索引页面。这难道不需要通过删除
city/
来更改现有的重写规则吗?这一个也可以:)但为什么这样[L,NC,R=302]?我可以用301代替302代码吗?是的,在你测试后一定要用
301
。另外,将
RewriteRule
RedirectMatch
指令混合使用也不是一个好主意。这就是我没有建议您使用基于<代码>重定向匹配<代码>的规则的主要原因。所以这种方法更友好,更实用?很高兴知道。谢谢你的回答。@JeremiahWinsley:这不是一个好主意的原因,因为它们是在两个不同的Apache模块中处理的
mod_alias
mod_rewrite
。它们在不同的阶段被调用。因此,如果您有多个规则与这两个指令混合,那么建立规则执行序列并不容易。太棒了!这正是我所需要的:)谢谢。作者问了一种方法,可以用一个命令完成所有300个任务。