在不使用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