Php “模式重写”添加了另一个url参数,但不起作用(多个参数)

Php “模式重写”添加了另一个url参数,但不起作用(多个参数),php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我有下面的htaccess文件代码 RewriteEngine On RewriteBase /site/public/admin/ RewriteCond %{REQUEST_METHOD} POST RewriteRule ^ - [L] RewriteCond %{THE_REQUEST} \s([^.]+?)(?:\.php)?\?caseid=([^&\s]+) [NC] RewriteRule ^ %1/caseid/%2/? [R=302,L] RewriteCond

我有下面的htaccess文件代码

RewriteEngine On
RewriteBase /site/public/admin/

RewriteCond %{REQUEST_METHOD} POST
RewriteRule ^ - [L]

RewriteCond %{THE_REQUEST} \s([^.]+?)(?:\.php)?\?caseid=([^&\s]+) [NC]
RewriteRule ^ %1/caseid/%2/? [R=302,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/caseid/([^/]+)/?$ $1.php?caseid=$2 [L,NC,QSA]

## hide .php extension snippet    
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1/ [R=302,L]

# add a trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
只要我提供一个参数
caseid

http://localhost/site/public/admin/PIClaimant.php?caseid=11
上面的URL已成功更改为

http://localhost/site/public/admin/PIClaimant/caseid/11/
我有几个页面有两个参数,它们是
PIClaimant.php?caseid=11&picid=34
。最初,当我创建htaccess文件时,我没有注意那些页面
(&picid=34仅在少数页面最多使用4页或5页)
。现在,当我回到那些有这些参数的页面时,它们不工作,不显示页面的内容。它们一直工作到第一个参数
PIClaimant/caseid/11/
,但不与第二个参数一起工作

因为我不太擅长这个(模式重写),我需要你的帮助


有什么想法吗?

将代码更改为以下代码:

RewriteEngine On
RewriteBase /site/public/admin/

RewriteCond %{REQUEST_METHOD} POST
RewriteRule ^ - [L]

#RewriteCond %{THE_REQUEST} \s([^.]+?)(?:\.php)?\?caseid=([^&\s]+) [NC]
RewriteCond %{THE_REQUEST} \s([^.]+?)(?:\.php)?\?caseid=([^&\s]+)?\&picid=([^&\s]+) [NC]
RewriteRule ^ %1/caseid/%2/picid/%3/? [R=302,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^([^/]+)/caseid/([^/]+)/?$ $1.php?caseid=$2
RewriteRule ^([^/]+)/caseid/([^/]+)/?$ $1.php?caseid=$2&picid=$3 [L,NC,QSA]


## hide .php extension snippet    
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1/ [R=302,L]

# add a trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

将代码替换为您的代码,看看是否有效

现在事情变得越来越复杂:)

在.htaccess中尝试以下代码:

RewriteEngine On
RewriteBase /site/public/admin/

RewriteCond %{REQUEST_METHOD} POST
RewriteRule ^ - [L]

RewriteCond %{THE_REQUEST} \s([^.]+?)(?:\.php)?\?caseid=([^&\s]+)?\&picid=([^&\s]+)\s [NC]
RewriteRule ^ %1/caseid/%2/picid/%3/? [R=302,L,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/caseid/([^/]+)/picid/([^/]+)/?$ $1.php?caseid=$2&picid=$3 [L,NC,QSA]

RewriteCond %{THE_REQUEST} \s([^.]+?)(?:\.php)?\?caseid=([^&\s]+)\s [NC]
RewriteRule ^ %1/caseid/%2/? [R=302,L,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/caseid/([^/]+)/?$ $1.php?caseid=$2 [L,NC,QSA]

## hide .php extension snippet    
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} \s([^.]+)\.php [NC]
RewriteRule ^ %1/ [R=302,L,NE]

# add a trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

@anubhava你在吗?谢谢@anubhava它工作得很好我很高兴,但我能在这里添加一件事情吗?现在它显示为这样(
http://localhost/site/public/admin/PIClaimant/caseid/8/43/
)我有没有办法在
43
ie之前添加picid。(
http://localhost/site/public/admin/PIClaimant/caseid/8/picid/43/
)我真的很感激你,谢谢你抽出时间帮助我,它不工作,它的行为很奇怪,就像那件案子的最后一个记录一样,但其他的都不行,就像如果一个案子有多个picid,它只会和最后一个案子一起工作,你可以提供它不工作的URL。我会检查你的Common因为我要赶去开会,所以一个小时内我没问题。工作url(
http://localhost/site/public/admin/PIClaimant/caseid/8/picid/43/“)当我点击其他图片时,它显示如下(
`)