我的主管最近告诉我,不要生成类似于此$pagecontent = "<html><body>blahblahlbahblah</body></html>"
的页面,最好是从数据库中提取页面信息,并使用干净的URL。
如何使用干净的网址?我之前从未这样做过,谷歌似乎有多个不同的答案,并没有明确的解决方案。它是PHP的东西吗?一个HTML的东西?一个Javascript的东西?
答案 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。