如何使用斜杠而不是问号发送GET请求?

4
我正在开发一款PHP应用程序,在其中需要在get请求中使用正斜杠代替问号,例如:
www.example.com/article?aid=10&aname=my-article 应该被更改为
www.example.com/article/10/my-article 以下是我的.htaccess文件:
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/$ http://example.com/$1 [R=301,L] 

# Redirect external .php requests to extensionless url 
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/ 
RewriteRule ^(.+)\.php$ http://example.com/$1 [R=301,L] 

# Resolve .php file for extensionless php urls 
RewriteRule ^([^/.]+)$ $1.php [L]

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^articles/(.*)$ articles?q=$1 [L,QSA,B]

我尝试了很多次,但是还没有找到解决方案。这个问题怎么办呢?

2个回答

1
你可以像这样做。
RewriteRule ([^/\.]+)/([^/\.]+)/?$ page.php?level1=$1&level2=$2 [L]

level 然后描述您的完整 URL,用符号 / 分隔。

然后在名为 page.php 的页面中,您可以执行以下操作:

$firstParameter = $_REQUEST["level1"];

在您的情况下,您可以这样做:

RewriteRule article/([^/\.]+)/([^/\.]+)/?$ article?aid=$1&aname=$2 [L]

那么你的网址将是/article/foo/bar

注意:

我通常使用RewriteBase /来进行基本的重写,带有/,不要放错位置:

Options +FollowSymLinks
RewriteBase /

RewriteEngine On

我想将 /article?aid=foo&aname=bar 转换为 /article/foo/bar。 - Vishal Suri
@VishalSuri - 你可以随心所欲地使用它。你可以有任意多层级。Page.php只是一个示例,你可以在其中获取信息。如果你的文件名叫做“article”,那也没有问题,然后“levels”的名称可以按照你的意愿来命名,例如aidaname等。我已经更新了我的帖子。 - Lorenzo Belfanti
@VishalSuri - 如果您认为这个答案是正确的,您可以将其设置为最佳答案,以便未来的访问者快速找到最合适的回答。 - Lorenzo Belfanti

1
你可以使用此规则将 /article/foo/bar 重写为 /article?aid=foo&aname=bar。在 RewriteEngine on 下面添加以下内容。
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^article/([^/]*)/([^/]+)/?$ /article?aid=$1&aname=$2 [L,QSA,B]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接