.htaccess PHP参数友好URL

cotxawn7  于 2022-11-30  发布在  PHP
关注(0)|答案(3)|浏览(172)

我想让商店的URL容易辨识。

    • 当前URL结构**

https://my-domain.com/store/store.php?page=packages&id=1

    • 所需的URL结构**

https://my-domain.com/store/packages/1

    • 还可直接访问PHP文件,例如:**

https://my-domain.com/store/profile.phphttps://my-domain.com/store/profile
我怎么会需要去之后呢?我真的很感激你能提供任何帮助。

  • 也可能值得注意的是,在基目录中,WordPress站点运行着自己的. htaccess文件。*

我已经试过了

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^store/store/page/(.*)/id/(.*) /store/store.php?page=$1&id=$2
RewriteRule ^store/store/page/(.*)/id/(.*)/ /store/store.php?page=$1&id=$2

但那不起作用

axkjgtzd

axkjgtzd1#

这段代码会起作用。
RewriteEngine将从所有PHP文件中删除.php RewriteRule将重写URL,如page/id
用于删除.php扩展名

RewriteEngine On
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]

对于页面/id

<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)? store.php?page=$1&id=$2 [L] 
</IfModule>
lhcgjxsq

lhcgjxsq2#

您可以在第一部分中使用以下代码:
RewriteRule ^store/((?!store)[^/]+)/([^/]+)$ /store/store.php?page=$1&id=$2 [L]

oxcyiej7

oxcyiej73#

虽然其他人的答案没有错,但更现代的方法是(包括WordPress、Symfony和Laravel)是将不存在的URL发送到单个路由器脚本,通过这样做,你只需要乱弄一次一个htaccess文件来设置东西,如果你添加更多的“子文件夹”,永远不会再碰它,你可以在PHP中完成所有这些。这也是更好的可移植性,这意味着你可以把它带到其他的服务器平台上,比如Nginx,只需做一些小的修改,并且不需要处理RegEx。
htaccess是相当简单的。将所有以/store/开头的请求路由到/store/文件夹中的一个名为router.php的新文件中。这是一个内部重定向,这意味着它不是301或302。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^store/ /store/router.php [L]

然后,在新的router.php文件中,可以解析$_SERVER['REQUEST_URI']以确定实际请求的URL,甚至可以重新构建全局变量$_GET

// Parse the originally requested URL into parts
$requestUrlParts = parse_url($_SERVER['REQUEST_URI']);

// Parse the query string into parts, erase the old global _GET array
parse_str($requestUrlParts['query'], $_GET);

// Handle 
switch($requestUrlParts['path']){
    case '/store/store.php';
        include '/store/store.php';
        exit;
        
    // Custom 404 logic here
    default:
        http_response_code(404);
        echo 'The page you are looking for cannot be found';
        exit;
}

我还建议把htaccess规则放在站点根目录的htaccess文件夹中,在WordPress的上面。创建多个文件没有什么错,这只是把事情放在一个中心位置,使调试更容易(恕我直言)。

相关问题