php - 使用 mod_rewrite 格式化 URL 参数

标签 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/

不擅长模式重写我想听听你的意见,请帮忙。

最佳答案

您可以使用这个 .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]

关于php - 使用 mod_rewrite 格式化 URL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25015921/

相关文章:

php - 对所有PDO查询进行一次全局尝试{}捕获{}

javascript - 用于验证比率的正则表达式,例如 Y39.29/28h

PhpStorm 2018-如何检查整个项目与php 7.2的兼容性?

jquery - IE6 和 Apache Logs 的 Superfish 悬停问题

django - apache中test.example.com到example.com的重定向问题

node.js - WebSocket 连接建立错误:net::ERR_CONNECTION_CLOSED

apache - htaccess 美化 URL 需要加 301 重定向吗

apache - 301 将单个页面的 HTTPS 重定向到 HTTP

php - 简单的 PHP 正则表达式字符串以

regex - 使用 .htaccess 从 URL 中删除最后一个路径