.htaccess 使用. htaccess删除php中的?id=

aamkag61  于 2023-01-05  发布在  PHP
关注(0)|答案(1)|浏览(185)

我正在尝试从URL中删除?id=,并将?id=替换为斜线(/)。
我想显示地址:

http://localhost/new/view-seller?id=534f5ddbdd

如:

http://localhost/new/view-seller/534f5ddbdd

我已设法从URL中删除.php,但?id=仍有问题
原始链接与?id=可访问。当我导航到没有?id=的页面,我得到:错误:您所请求的网址(URL)未找到
有人知道我该怎么修吗?
下面是我的.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
uwopmtnx

uwopmtnx1#

您需要在 root.htaccess文件中执行类似以下的操作:

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+)/([\da-z]+)$ $1.php?id=$2 [L]

以上代码将把/<file>/<id>重写为/<file>.php?id=<id>,前提是/<file>.php存在。<file>可以由多个路径段组成(例如,示例中的new/view-seller)。
这里假设<id>是字母数字小写的,如果是十六进制的,那么正则表达式应该相应地做得更具体。
而且,如果这应该只适用于view-seller,那么正则表达式应该再次变得更具体。
如果您需要将此规则与通用的“append .php“规则结合使用,则应首先使用上述规则。例如:

# 1. Rewrite "/<file>/<id>" to "/<file>.php?id=<id>"
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+)/([\da-z]+)$ $1.php?id=$2 [L]

# 2. Rewrite "/<file>" to "/<file>.php"
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule (.+) $1.php [L]

规则#2基本上与原始规则相同,只是原始规则有几个问题(次要问题,但目录检查在这里是多余的)。

相关问题