从网址中删除文件名,并在网址中保留2个GET变量?

问题描述

我正在开发一个网站,需要在该网站上创建特定的URL结构...那么如何制作此URL:

http://example.com/index.PHP?city=mumbai&place=chembur

对此:

http://example.com/mumbai/chembur

有可能吗?

编辑:

我尝试在htaccess文件中使用以下代码,但显示空白页面

# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteRule !/$ %{REQUEST_URI}/ [L,R=301]

# RewriteCond %{REQUEST_FILENAME} -f [OR]
# RewriteCond %{REQUEST_FILENAME} -d
# RewriteRule ^ - [L]

# RewriteRule ^([^/]+)/([^/]+)/?$ index.PHP?city=$1&place=$2 [L,QSA]

# RewriteRule ^([^/]+)/?$ index.PHP?city=$1 [L,QSA]

编辑:我选择@AbsoluteBeginner答案,因为它的代码更少且错误为0。我知道这不是URL重定向,但可以解决我的问题。

还,谢谢@CallofDev的帮助!

解决方法

在这里,我们必须分别处理规则,以便在您只有一个或两个变量的情况下获得特定的url。在您的情况下,您为同一规则分配了条件,因此不起作用。因此,我们为两种URL格式定义了条件。如果仅传递了city的值,则第一个规则将起作用,而仅当两个值均被传递时,另一个规则将起作用。在这里,此链接将帮助您了解如何https://htaccess.madewithlove.be?share=1fe76858-2b15-5848-bbbe-32e55b692e1e检查规则。

RewriteEngine on

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^([^/]+)$ index.php?city=$1 [L]

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^([^/]+)/([^/]+)$ index.php?city=$1&place=$2 [L]
,

您可以使用一个简单的PHP Router。

.htaccess

FallbackResource index.php

index.php

$path = explode('/',$_SERVER['REQUEST_URI']);
$city = $path[1]; // mumbai
$place = $path[2]; // chembur

// Do what you want with those two variables (database query or include a file).

这将使您完全控制url结构。这不是URL重写,而是另一种方法。