Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中重新编写URL?_Php_Apache_Mod Rewrite_Seo_Url Rewriting - Fatal编程技术网

如何在PHP中重新编写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将是最好的,

我试图在我的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将是最好的,根据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种模式:

  • 常规URL:?id=zzz
  • .htaccess rewrite:使用apache进行重写
  • 内部(php)重写:URL最终看起来像
  • 它是免费的,所以你可以下载和浏览代码


    需要注意的是,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_重写代码
  • 允许您将所有安全代码放在一个位置-index.php中
  • 很容易更改URL和处理404等

  • 您可以使用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