2010-01-24 43 views
21

网站运行在我们无法访问.htaccess文件的网页主机上。但是,我想为用户友好的URL进行URL重写。在不使用htaccess的情况下使用PHP进行URL重写

例如原始地址

www.example.com/file?q=name 

预期网址

www.example.com/file/name 
+0

只是举例 website.user的文章部分提交了一篇文章,并且生成了像www.domain-name/articles?cat = 3&id = 34这样的动态url,但是我想要这个www。domain-name/articles/cat-name/article-name – Vivart 2010-01-24 11:29:26

回答

16

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

都好,你可以问你的主机供应商任何重定向指向/index.php的网址,以便您无需在网址中添加/index.php即可处理网址重写。

然后,您可以使用正则表达式匹配来检测包含哪个文件。
preg_match('@[/]{1}([a-zA-Z0-9]+)@', $_SERVER["PATH_INFO"], $matches)($比赛将包含阵列中的全部网址的“部件”)

小心,包括文件,使用白名单所以你一定没有人能够加载内部文件。

+0

检查这个帖子链接你的CSS,HTTP://什么-在线。 info/science-and-tutorials/104/how-to-writing-PHP-SEO-friendly-URLs-without-htaccess /将使用HTACCESS文件巧妙地解决你的URL重写 – 2017-01-13 08:17:14

4

你最好的选择将是有网址,像这样的:

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

你会来,虽然重写PHP代码。

5

为阿利克斯阿克塞尔建议您可以使用

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

则可以使用$_SERVER['REQUEST_URI']处理URL。

+0

在这种情况下,最好使用'$ _SERVER ['PATH_INFO']'而不是'$ _SERVER ['REQUEST_URI']'。 – 2010-01-24 11:34:46

+0

此解决方法看起来不错。一个问题,当我使用www.domain-name.com/index.php/filename它看起来像当前目录更改 和所有css格式化丢失和相对导航也无法正常工作。 有什么建议。您的每一个文件的参考 – Vivart 2010-01-24 12:12:17

+1

添加/基本参考像 ''也 使用基本参考'SRC = “/媒体/ css.css”' – Pentium10 2010-01-24 12:37:56

3

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

0

试试这个

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] 

这解决了您的问题。看帖子如何rewrite URL in .htaccess