使用mod_rewrite格式化URL参数

时间:2014-07-29 12:59:26

标签: php apache .htaccess mod-rewrite webserver

首先让我告诉你我的.htaccess文件代码

RewriteEngine On
RewriteBase /site/public/admin/

## 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,L]

# add a trailing slash    
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
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]

上面的代码工作正常,但我想添加到这里的是当我键入以下URL

http://localhost/site/public/admin/AccidentDetails/?caseid=12

它应该改为以下

http://localhost/site/public/admin/AccidentDetails/caseid/12/

不擅长模式重写我想就此发表意见,请帮助。

3 个答案:

答案 0 :(得分:2)

RewriteBase行的正下方,添加:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+?)(?:\.php|)\?caseid=([0-9]+)
RewriteRule ^ %1/caseid/%2/? [R,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/caseid/([0-9]+)/$ $1?caseid=$2 [L]

答案 1 :(得分:2)

您可以使用此.htaccess:

RewriteEngine On
RewriteBase /site/public/admin/

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]

答案 2 :(得分:1)

RewriteBase

下添加以下代码
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]