如何在PHP中重新编写URL?
我试图在我的PHP应用程序中实现URL重写。有人可以分享一个在PHP和MySQL中实现URL重写的分步过程吗 在我的应用程序中,我想实现以下URL重写,我想重定向如何在PHP中重新编写URL?,php,apache,mod-rewrite,seo,url-rewriting,Php,Apache,Mod Rewrite,Seo,Url Rewriting,我试图在我的PHP应用程序中实现URL重写。有人可以分享一个在PHP和MySQL中实现URL重写的分步过程吗 在我的应用程序中,我想实现以下URL重写,我想重定向 1. http://example.com/videos/play/google-io-2009-wave-intro 2. http://example.com/videos/play/203/google-io-2009-wave-intro 到 请告诉我如何以上述任何一种方式实现URL重写 还有一件事,哪一个URL将是最好的,
1. http://example.com/videos/play/google-io-2009-wave-intro
2. http://example.com/videos/play/203/google-io-2009-wave-intro
到
请告诉我如何以上述任何一种方式实现URL重写
还有一件事,哪一个URL将是最好的,根据SEO,管理,应用程序的角度来看出以下两种类型
1. http://example.com/videos/play/google-io-2009-wave-intro
2. http://example.com/videos/play/203/google-io-2009-wave-intro
在再次阅读评论和问题之后,我意识到我之前的答案并不完全是你们想要的。因此,这里有一些补充,如果您想重写/重定向/代理URL地址,例如,用户键入www.f1.com,他将实际看到www.f2.com,但域将保持不变,您可能需要为此使用Apache设置一个。它的行为类似于mod_rewrite 关于第二部分,由于现代爬虫程序也执行URL链接分析,我认为您的第一个选项在性能方面更好 先前的答案:
使用PHP可以实现重定向,如:
<?php
// Here you can parse the current location
// and decide whenever you want to go
// if $_SERVER[ 'PHP_SELF'] some conditions then....
header('Location: http://www.example.com/');
?>
从。更多示例。单靠PHP无法做到这一点。您需要研究mod_rewrite(假设您使用的是apache)。 通常,这只不过是启用mod_rewrite模块(您的主机可能已经启用了它),然后将.htaccess文件添加到web目录中。一旦你做到了这一点,你就只剩下几行了。上面链接的教程将为您提供帮助 为了好玩,这里有一个用于重写的.htaccess文件:
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /rootDir/
# Protect application and system files from being viewed
RewriteRule ^(application|modules|system) - [F,L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/
RewriteRule .* index.php/$0 [PT,L]
这样做的目的是接收所有请求并通过index.php文件传递它们。因此,如果您访问了www.examplesite.com/subjects/php,您实际上可能正在访问www.examplesite.com/index.php?a=subjects&b=php
如果您觉得这些URL很有吸引力,我鼓励您进一步查看MVC框架(模型、视图、控制器)。它本质上允许您将网站视为一组功能:
www.mysite.com/jokes
public function jokes ($page = 1) {
# Show Joke Page (Defaults to page 1)
}
或者,www.mysite.com/jokes/2
public function jokes ($page = 1) {
# Show Page 2 of Jokes (Page 2 because of our different URL)
}
请注意,第一个正斜杠是如何调用函数的,后面的所有内容都将填充该函数的参数。这真的很好,让web开发变得更加有趣 很抱歉没有给你详细的解释,但也许你可以先看一下 在其设置中,它接受3种模式:
需要注意的是,apache重定向很可能是最好的解决方案,但如果您的代码要在IIS6服务器上运行,那么纯php重定向也很有趣,因为在IIS6服务器上重写不如apache容易。不幸的是,这实际上取决于web服务器,而不是php。根据您是否使用Apache或其他什么,它必须在执行脚本之前执行此操作。我使用mod_rewrite,一个示例重写规则如下所示:
<Directory "/home/www/html">
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/%{REQUEST_URI} [PT,L]
</Directory>
重新启动发动机
重写基/
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$/index.php/%{REQUEST_URI}[PT,L]
上面的规则基本上是说,如果URL是指向真实文件或目录的有效路径,请加载它。否则,通过index.php运行它。如果您的服务器支持它(apache/mod_rewrite),您可以使用.htaccess文件重新引导访问者 比如(只是一个草稿,适应你自己的需要…): 对于第二个示例。使用mod rewrite:
RewriteRule ^videos/play/([0-9]+)/([^.]+)$ play.php?id=$1&name=$2
example.com/play.php?id=203&name=google-io-2009-wave-intro
将作为
example.com/videos/play/203/google-io-2009-wave-intro请记住,重定向与重写不同 重定向是指服务器接收到请求并将响应作为重定向发送。例如,您请求一个页面www.example.com/page。当服务器收到此消息时,页面或服务器会向浏览器发出重定向命令。重定向命令基本上说是“转到这里:新页面”。在PHP中,这是以头的形式('Location:newpage.html')
重写是指服务器从浏览器接收到请求,然后查找该站点的匹配正则表达式列表。如果找到匹配项,URL将重写为该形式并相应地响应。例如,请求的URL www.example.com/specificpage可以(在服务器端)重写为www.example.com/?loadpage=specificpage。浏览器从来不会收到标题信息,说明它必须去其他地方。您可以通过使用前端控制器来实现这一点,这与上面的建议略有不同,它是制作自定义URL的常见解决方案,可用于所有语言,而不仅仅是PHP。这里有一个指南: 实际上,您将创建一个index.php文件,该文件为每个URL调用,其工作是解析URL并根据URL的内容确定要运行的代码。因此,例如,用户将使用一个URL,如和index.php,将从URL中提取其余元素(/videos/play/203/google-io-2009-wave-intro)作为第一部分,加载一个具有该名称的php文件(videos.php或您可以使用play.php),并传递参数203和google io 它有效地完成了与在mod_rewrite中重写代码相同的工作,但确实有一些好处:
您可以使用mod_rewrite从URL中删除index.php,请参见此处:根据您的问题,我很有可能不会。所以可能是
RewriteEngine On
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/([0-9]+)/([-0-9a-zA-Z]+)/?$ /$1/$2.php?id=$3 [L]
RewriteRule ^videos/play/([0-9]+)/([^.]+)$ play.php?id=$1&name=$2