在不使用htaccess的PHP中进行URL重写

网站运行在我们无法访问.htaccess文件的Web主机上。 但是,我想要为用户友好的URL进行URL重写。

例如原始url

 www.example.com/file?q=name 

预期的url

 www.example.com/file/name 

正如其他人所说,只需使用像/index.php/nice/looking/url这样的/index.php/nice/looking/url
在URL中间的“index.php”可能看起来有点奇怪,但我不认为没有.htaccess可能会让它看起来更好

否则,您可以要求您的主机将任何urlredirect到/index.php,以便您可以在url中不使用/index.php情况下处理url重写。

然后,您可以使用正则expression式匹配来检测包含哪个文件。
preg_match('@[/]{1}([a-zA-Z0-9]+)@', $_SERVER["PATH_INFO"], $matches) ($ matches将包含url中的所有“部分”arrays)

包括文件时要小心,使用白名单,以确保没有人能够加载内部文件。

正如Alix Axelbuild议您可以使用

 www.example.com/index.php/file/name 

那么你将使用$_SERVER['REQUEST_URI']来处理URL。

你最好的select是拥有这样的URL:

 www.example.com/index.php/file/name 

尽pipe如此,你将会重写你的PHP代码。

如果你有一个Apache服务器并且启用了AcceptPathInfo ,那么你可以使用你写的URL。 如果/file是常规文件,那么/file/name请求会被自动重写为/file ,其中PATH_INFO的值为/name

尝试这个

www.example.com/file?q=name

www.example.com/name (比www.example.com/file/name更好)

从您的项目根文件夹打开您的.htaccess并添加此代码

 Options +FollowSymLinks RewriteEngine On RewriteRule \.(js|css|jpe?g|png|gif)$ - [L] RewriteRule "^([ \w-]+)/?$" /file?q=$1 [L,QSA] 

这解决了你的问题。 看看如何在.htaccess重写url