Php 请提供URL重写建议
我想让我的URL更加seo友好,例如: 做点像这样的好事: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] /* ..
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表示不实用。:)本教程很棒,但还不够。它也不会让任何事情变得更容易,相反