Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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
使url在.htaccess文件中重写以双向工作_.htaccess_Url Rewriting - Fatal编程技术网

使url在.htaccess文件中重写以双向工作

使url在.htaccess文件中重写以双向工作,.htaccess,url-rewriting,.htaccess,Url Rewriting,我有以下.htaccess文件: <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^project/([0-9]+)/([a-zA-Z0-9]+)/(.+)?$ project.php?id=$1&pName=$2&urlPram=$3 [L,NC] </

我有以下.htaccess文件:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^project/([0-9]+)/([a-zA-Z0-9]+)/(.+)?$ project.php?id=$1&pName=$2&urlPram=$3  [L,NC]

</IfModule>
一切正常。但我也希望当url以另一种格式键入时,被重写为第一种格式。 i、 e.当我像这样键入url时:

mysite.com/project.php?id=1&pName=test&urlParam=vw
我想把它变成:

mysite.com/project/1/test/vw

我必须写另一条规则吗?还是通过其他方式完成的?

当前的重写规则无法处理这两种情况。同时添加下面的重写规则

RewriteEngine On
RewriteBase /mysite/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^project/([0-9]+)/([a-zA-Z0-9]+)/(.+)?$ project.php?id=$1&pName=$2&urlParam=$3&no-redir  [L,NC,QSA]

RewriteCond %{QUERY_STRING} !no-redir
RewriteCond %{QUERY_STRING} (^|&)id=([^&]+)&pName=([^&]+)&urlParam=([^&]+)
RewriteRule ^project\.php$ project/%2/%3/%4?  [R=301,L,NC]

您还需要一个外部重定向规则。使用此代码:

<IfModule mod_rewrite.c>

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteCond %{THE_REQUEST} /project\.php\?id=([^&]+)&pName=([^&]+)&urlPram=([^&\s]+) [NC]
RewriteRule ^ project/%1/%2/%3? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^project/([0-9]+)/([a-zA-Z0-9]+)/(.+)?$ project.php?id=$1&pName=$2&urlPram=$3 [L,NC,QSA]

</IfModule>

选项+以下符号链接-多视图
重新启动发动机
重写cond%{THE_REQUEST}/project\.php\?id=([^&]+)&pName=([^&]+)&urlPram=([^&\s]+)[NC]
是否重写规则^project/%1/%2/%3?[R=301,L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^project/([0-9]+)/([a-zA-Z0-9]+)/(.+)?$project.php?id=$1&pName=$2&urlPram=$3[L,NC,QSA]

所以当有人键入url
mysite.com/project.php?id=1&pName=test&urlParam=vw
?@putvande时,你想要重定向,我不知道这是否是我需要的重定向。我的意思是,同一个物理php文件将为这两个url提供服务,我只是不希望url以这种格式出现在地址中,这导致url为:mysite.com/project/1/test/vw?id=1&pName=test&urlParam=vwUse
project/%2/%3/%4?
注意末尾的
。同样的问题,在localhost中,我键入:
localhost/mysite/project.php?id=1&pName=test&urlParam=vw
并将其转换为:
localhost/C:/xampp/htdocs/mysite/project/1/test/vw?id=1&pName=test&urlParam=vw
请注意,
mysite.com/project.php?id=1&pName=test&urlParam=vw
的结构与
http://localhost/mysite/project.php?id=1&pName=test&urlParam=vw
不同之处在于
mysite
文件夹在
/project.php
段之前。对不起,我想我应该提到子文件夹。谢谢你抽出时间。上面的答案符合我的要求。
<IfModule mod_rewrite.c>

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteCond %{THE_REQUEST} /project\.php\?id=([^&]+)&pName=([^&]+)&urlPram=([^&\s]+) [NC]
RewriteRule ^ project/%1/%2/%3? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^project/([0-9]+)/([a-zA-Z0-9]+)/(.+)?$ project.php?id=$1&pName=$2&urlPram=$3 [L,NC,QSA]

</IfModule>