Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.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/6/apache/9.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_Url Rewriting - Fatal编程技术网

Php 请提供URL重写建议

Php 请提供URL重写建议,php,apache,url-rewriting,Php,Apache,Url Rewriting,我想让我的URL更加seo友好,例如: 做点像这样的好事: http://www.chillisource.co.uk/product/Daves_Gourmet/Daves_Insanity_Sauce 这样做的最佳方式是什么?我已经看过如何使用htaccess文件来实现这一点,但这似乎非常复杂 提前感谢使用PATH\u INFO环境变量怎么样 $path=explode("/",getenv("PATH_INFO")); echo($path[0]."; ".$path[1] /* ..

我想让我的URL更加seo友好,例如:

做点像这样的好事:

http://www.chillisource.co.uk/product/Daves_Gourmet/Daves_Insanity_Sauce
这样做的最佳方式是什么?我已经看过如何使用htaccess文件来实现这一点,但这似乎非常复杂


提前感谢

使用
PATH\u INFO
环境变量怎么样

$path=explode("/",getenv("PATH_INFO"));
echo($path[0]."; ".$path[1] /* ... */);
将输出

product; Daves_Gourmet; Daves_insanity_Sauce

从使用
$\u GET
到使用
PATH\u INFO
环境的转换是一个很好的编程练习。我认为您不能只通过配置来完成任务。

使用
PATH\u INFO
环境变量怎么样

$path=explode("/",getenv("PATH_INFO"));
echo($path[0]."; ".$path[1] /* ... */);
将输出

product; Daves_Gourmet; Daves_insanity_Sauce

从使用
$\u GET
到使用
PATH\u INFO
环境的转换是一个很好的编程练习。我认为你不能仅仅通过配置来完成这项任务。

它被称为mod_重写,下面是一个教程:


这被称为mod_重写,下面是一个教程:


试试这样的东西

RewriteRule ^/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)  /$1.php?id1=$2&id2=$3 [QSA]

然后使用
$\u GET
获取参数值…

尝试类似的方法

RewriteRule ^/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)  /$1.php?id1=$2&id2=$3 [QSA]

然后使用
$\u GET
获取参数值…

Ben Paton,实际上有一个非常简单的方法。像Wordpress这样的CMSE倾向于使用它,而不是与正则表达式混在一起


.htaccess
侧 首先,将.htacess与以下内容一起使用:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>

易于集成 我差点忘了提到这一点,但是,由于它的工作方式,您甚至可以完全不更改现有代码

少说话,多举例。假设您的代码如下所示:

<?php

    $page = get_page($_GET['id']);
    echo '<h1>'. $page->title .'</h1>';
    echo '<div>'. $page->content .'</div>';

?>
你可以让它与搜索引擎优化网址,以及保持它与您的旧系统在同一时间。首先,确保
.htaccess
包含我在上面的代码中编写的代码

接下来,在文件的开头添加以下代码:

if ( isset( $_SERVER['REDIRECT_URL'] ) ) {

    $url = explode('/', $_SERVER['REDIRECT_URL'] );
    $_GET['id'] = $url[0];

}
我们在这里干什么?在开始编写您自己的两个代码之前,我们基本上是从旧URL中查找ID和信息,并将其提供给PHP的$\u GET变量。 我们实际上是在愚弄你的代码,以为请求中有这些变量


找到所有那些讨厌的
标签并相应地替换它们的
href
的唯一障碍,但这是另一回事。:)
本·帕顿,其实有一条非常简单的出路。像Wordpress这样的CMSE倾向于使用它,而不是与正则表达式混在一起


.htaccess
侧 首先,将.htacess与以下内容一起使用:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>

易于集成 我差点忘了提到这一点,但是,由于它的工作方式,您甚至可以完全不更改现有代码

少说话,多举例。假设您的代码如下所示:

<?php

    $page = get_page($_GET['id']);
    echo '<h1>'. $page->title .'</h1>';
    echo '<div>'. $page->content .'</div>';

?>
你可以让它与搜索引擎优化网址,以及保持它与您的旧系统在同一时间。首先,确保
.htaccess
包含我在上面的代码中编写的代码

接下来,在文件的开头添加以下代码:

if ( isset( $_SERVER['REDIRECT_URL'] ) ) {

    $url = explode('/', $_SERVER['REDIRECT_URL'] );
    $_GET['id'] = $url[0];

}
我们在这里干什么?在开始编写您自己的两个代码之前,我们基本上是从旧URL中查找ID和信息,并将其提供给PHP的$\u GET变量。 我们实际上是在愚弄你的代码,以为请求中有这些变量


找到所有那些讨厌的
标签并相应地替换它们的
href
的唯一障碍,但这是另一回事。:)

我必须补充:在您的原始url中,有一个“prod”键,它似乎由一个ID组成。 确保在切换到重写的url时,您不再仅仅依赖于唯一的id,因为该id在url中不可见。 现在,您可以使用ID来区分具有相同名称的两个产品,但如果重写url并且不再需要url中的ID,则需要确保一个产品名称不能多次用于不同的产品。 同样,我看到“cat”键不存在于所需的输出url中,如上所述同样适用

忽略上述“问题”,重写应该大致如下所示:

RewriteRule ^/product/(.*?)/(.*?)$ /product?&cat=Grocery&q=$1&page=1&prod=B0000DID5R&prodName=$2
q&prodName将接收带下划线的值,而不是%20,因此这也需要一些修补。
如您所见,我没有触及id和类别,这将取决于您如何处理。

我必须补充:在您的原始url中,有一个“prod”键,它似乎包含一个id。 确保在切换到重写的url时,您不再仅仅依赖于唯一的id,因为该id在url中不可见。 现在,您可以使用ID来区分具有相同名称的两个产品,但如果重写url并且不再需要url中的ID,则需要确保一个产品名称不能多次用于不同的产品。 同样,我看到“cat”键不存在于所需的输出url中,如上所述同样适用

忽略上述“问题”,重写应该大致如下所示:

RewriteRule ^/product/(.*?)/(.*?)$ /product?&cat=Grocery&q=$1&page=1&prod=B0000DID5R&prodName=$2
q&prodName将接收带下划线的值,而不是%20,因此这也需要一些修补。
如您所见,我没有触及id和类别,这将取决于您如何处理。

您的原始url包含的参数比您的重写版本多……htaccess是正确的方法。所以,你要考虑一下这种复杂性:)事实上,这只是正则表达式。你的原始url包含的参数比你重写的版本多……htaccess是正确的方法。因此,请仔细考虑一下这种复杂性:)实际上,它只是正则表达式。对于维护人员的噩梦非常有效:)对于维护人员的噩梦非常有效:)本教程非常好,但还不够。它也没有使任何事情变得更容易,相反,它最终成为了意大利面条代码+1表示教程,-1表示不实用。:)本教程很棒,但还不够。它也不会让任何事情变得更容易,相反