使用 Apache 在 PHP 上使用 2 个参数创建一个友好的 URL

Make a friendly URL with 2 parameters on PHP with Apache

所以我在这里有点麻烦。

我需要做一个友好的URL。

这是我输入搜索值 project_name 和版本

的 URL

localhost:8080/demo_webpages_project/retrieval.html

这是我提交值的地方

localhost:8080/demo_webpages_project/download.php?project_name=QT&version=3.1.2

我想要下面形式的URL

localhost:8080/demo_webpages_project/download/QT/3.1.2

我尝试使用 .htaccess 执行此操作,但没有真正找到解决方案

以下是 .htaccess 文件的代码。

<IfModule mod_rewrite.c>
#Turn the engine on
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#attempt1
#RewriteRule ^(.*)/$ download.php?project_name=&version=
#RewriteRule ^/(.*)$ download.php?version=

#attempt2
#RewriteRule ^(.*)/(.*)$ download.php?project_name=&version= [L,NC,QSA]
#RewriteRule ^(.*)$ download.php?version=

</IfModule>

如果有人能帮助我解决这个问题,我将不胜感激。这是我第一次从事这方面的工作,但迷路了。

谢谢

根据此 article,您需要一个如下所示的 mod_rewrite(放置在 .htaccess 文件中)规则:

RewriteEngine on 
RewriteRule ^/news/([0-9]+)\.html /news.php?news_id=

这映射了来自

的请求
/news.php?news_id=63

/news/63.html

另一种可能性是使用 forcetype 来实现,它会强制沿着特定路径的任何内容使用 php 来评估内容。因此,在您的 .htaccess 文件中,放入以下内容:

<Files news>
    ForceType application/x-httpd-php
</Files>

然后 index.php 可以根据 $_SERVER['PATH_INFO'] 变量采取行动:

<?php
    echo $_SERVER['PATH_INFO'];
    // outputs '/63.html'
?>

里面有这个 .htaccess /demo_webpages_project/:

Options -MultiViews
RewriteEngine on
RewriteBase /demo_webpages_project/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ download.php?project_name=&version= [L,QSA]