干净的URL - 我如何做到这一点?

时间:2011-11-30 19:32:42

标签: php javascript html

我的主管最近告诉我,不要生成类似于此$pagecontent = "<html><body>blahblahlbahblah</body></html>"的页面,最好是从数据库中提取页面信息,并使用干净的URL。

如何使用干净的网址?我之前从未这样做过,谷歌似乎有多个不同的答案,并没有明确的解决方案。它是PHP的东西吗?一个HTML的东西?一个Javascript的东西?

5 个答案:

答案 0 :(得分:2)

它通常是一个.htaccess的东西,叫做mod_rewrite,如果你使用的网站是在Apache下托管的(使用PHP,大部分都是)。 .htaccess文件的一个简单示例是:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$  [NC]
RewriteRule (.*) index.php?query=$1&%{QUERY_STRING}

因此,在此示例中,http://example.com/aLink/?test=a将重定向到http://example.com/index.php?query=aLink/&test=a

然后,您可以使用PHP来解析$_GET['query']变量。

答案 1 :(得分:1)

干净的网址通常使用网址重写来完成,他们将site.com?var=1&var2=2转换为site.com/1/2

在Apache服务器上,这是使用mod_rewrite完成的。您可以使用Wordpress进行实验,这将生成适当的Apache文件和代码,用于将?page=name&category=that重写为/name到{{1}}。

答案 2 :(得分:0)

我认为他的意思是代替

http://www.snoop.com/pages?id=3

你宁愿拥有

http://www.snoop.com/pages/snoop_is_the_best

如评论中所述,根据网络服务器,webapp设置,您可以免费获得。 Apache使用mod_rewrite来代替。

答案 3 :(得分:0)

使用Apache和PHP,您也可以在没有mod_rewrite的情况下完成此任务。这些天似乎没有人关心运行mod_rewrite所需的开销,但是如果你有兴趣从网络服务器中挤出所有性能,你可能会喜欢这种替代方法。

有关使用Apache的ForceType指令解决方案的解释,请参阅http://www.evolt.org/Making_clean_URLs_with_Apache_and_PHP

答案 4 :(得分:0)

干净的URL只是一个没有查询字符串的URL。例如,您可能希望http://example.com/index.php?page=foo代替http://example.com/foo而不是<IfModule mod_rewrite.c> RewriteEngine on # Rewrite URLs of the form 'x' to the form 'index.php?q=x'. RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </IfModule> 对于想要移动到干净URL的大型现有站点,它们会变得非常复杂。正如Matt H和其他人所说,您可以使用Apache重写将现有URL更改为干净的URL。 http://httpd.apache.org/docs/current/mod/mod_rewrite.html有关于mod_rewrite的完整文档,但您可能会从示例中学得更快。 jValdron刚刚发布了一个体面的。这个答案正在迅速成为更快答案的混搭。有很多关于重写和使用PHP处理它们的文档,这个广泛的问题不值得再回答。

如果你有一个非常大的网站,其中包含大量带有查询字符串的php页面,那么你将不得不计划编写大量的重写并确保你的链接没有t break或单个重写到将处理重定向到正确页面的脚本。

如果您要制作新网站,我会将您的网址重写为单个脚本,该脚本将根据网址获取内容。

以下是Drupal的.htaccess文件中的一个着名示例。

QSA

然后L表示查询字符串追加,而Stop the rewriting process immediately and don't apply any more rules.表示最后{{1}}

然后index.php可以使用$ _GET ['q']访问URL。