【问题标题】:How to write multiple url for diff pages using php and htaccess如何使用 php 和 htaccess 为 diff 页面编写多个 url
【发布时间】:2018-03-19 12:28:30
【问题描述】:

我的网页需要多种 url 重写方法。 我可以使用 PHP 和 htaccess 重写一个 url: index.php 页面代码 PHP代码:

       $retvalue=$_POST["packagestring"];
     $_SESSION["package_string"] = $retvalue;
    header("location:package/".php_slug($retvalue)."");
}
function php_slug($string)  
{  
    list($packageid, $packagename) = explode(":",$string);

   $url = $packageid."/".strtolower(str_replace(' ', '-', $packagename));
  $slug = preg_replace('/[^a-z0-9-]+/', '-', trim(strtolower($url)));  
  return $url;  
} 

当我点击按钮时,通过 index 页面的 post 方法,我跳转到带有 url 的包页面: http://localhost/xyz/package/2/temp-temp-temp

因为这个包页面包含一个提交按钮,当我点击这个 usbmuit 按钮时,我想用下面的 url 转到 book_package 页面:

http://localhost/xyz/book_package/2/temp-temp-temp

但我得到了 http://localhost/xyz/package/2/book_package.php

这是带有 url 而不是第二个 url 的工作 htaccess 文件

RewriteEngine On  
RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $1
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^package/([a-zA-Z0-9-/]+)$ package.php?packagestring=$1  
RewriteRule ^package/([a-zA-Z-0-9-]+)/ package.php?packagestring=$1 
RewriteRule ^xyz/(css|js|img)/(.*)?$ /$1 [L,QSA,R=301] 
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^book_package/([a-zA-Z0-9-/]+)$ book_package.php?booknow=$1  
RewriteRule ^book_package/([a-zA-Z-0-9-]+)/ book_package.php?booknow=$1 
RewriteRule ^xyz/(css|js|img)/(.*)?$ /$1 [L,QSA,R=301] 

下面是url重写的包页面代码:

if(!isset($_GET["packagestring"])){
  header('location:index.php');
 }elseif(isset($_GET["packagestring"])) {
  $getpackage = $_GET["packagestring"];

} 函数 php_slug($string)
{
list($packageid, $packagename) = explode(":",$string); $url = $packageid."/".strtolower(str_replace(' ', '-', $packagename)); $slug = preg_replace('/[^a-z0-9-]+/', '-', trim(strtolower($url)));
返回 $url;
}

 if(isset($_POST["booknow"])){
   $retvalue=$_POST["booknow"];
    var_dump($retvalue);
    header("location:book_package.php");
}

任何人都建议我如何实现这一点

【问题讨论】:

  • 非常不清楚你在问什么,分别。你甚至想在这里实现什么。您在谈论 POST 请求 - 请不要说您将它们用于实际的页面导航(应该通过 GET 发生)......?这需要从哪里开始重写,这听起来好像您根本没有指定您正确提交的表单的action......?
  • 或者您是在谈论您在处理发送 POST 数据后所做的重定向?那么在其中指定 正确的 URL,而不是仅使用 header("location:book_package.php") ...?
  • 我在发布索引和包页面后制作 url。当我单击索引页面的按钮时,我跳转到具有准确 URL 为 localhost/xyz/package/2/temp-temp-temp 的包页面当我单击包页面的按钮时,我想跳转到 URL 为 localhost/xyz/book_package/2/temp-temp-temp 的 book_package 页面,这不会发生吗?我得到的网址是:localhost/xyz/package/2/book_package.php我想现在很清楚,如果不是请亲密我
  • 不,没有比以前更清楚了。 “我在发布索引和包页面后创建 url” - 不知道这是什么意思。 “当我点击索引页面的按钮时,我会跳转到具有准确 url 作为 localhost/xyz/package/2/temp-temp-temp 的包页面” - 以及“跳转”那里的目的是什么?如果您只是希望用户在第一步中切换到不同的页面,那么为什么这是一个 POST 表单(?)开始 - 为什么您没有为 this 使用正确的链接? “我将 url 获取为:” - 再次,很可能是因为您在此位置开始时指定了错误的相对 URL。

标签: php .htaccess


【解决方案1】:

我有 3 页作为 1. index.php 2. 包.php 3. book_package.php 我想按1->2->3的顺序遍历 索引页部分代码为:

if(isset($_POST["packagestring"])){
    $retvalue=$_POST["packagestring"];
     $_SESSION["package_string"] = $retvalue;
    header("location:package/".php_slug($retvalue)."");
}
function php_slug($string)  
{  
  list($packageid, $packagename) = explode(":",$string);
  $url = $packageid."/".strtolower(str_replace(' ', '-', $packagename));
  $slug = preg_replace('/[^a-z0-9-]+/', '-', trim(strtolower($url)));  
  return $url;  
} 

在 POST 请求中,我将 packagestring 值设为“2:temp temp temp” 现在,我想用用户友好的 url 跳转到 package.php,这就是为什么我创建了一个将 packagestring 转换为 2-temp-temp-temp 的 slug 函数,并且位置将作为 package.php

htaccess 文件代码为:

RewriteEngine On  
RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $1
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^package/([a-zA-Z0-9-/]+)$ package.php?packagestring=$1  
RewriteRule ^package/([a-zA-Z-0-9-]+)/ package.php?packagestring=$1 
RewriteRule ^xyz/(css|js|img)/(.*)?$ /$1 [L,QSA,R=301] 
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^book_package/([a-zA-Z0-9-/]+)$ book_package.php?booknow=$1  
RewriteRule ^book_package/([a-zA-Z-0-9-]+)/ book_package.php?booknow=$1 
RewriteRule ^xyz/(css|js|img)/(.*)?$ /$1 [L,QSA,R=301] 

以上代码将帮助我将用户友好的网址设置为 本地主机://xyz/package/2-temp-temp-temp 而不是 localhost://xyz/package.php?packagestring=2:temp temp temp 通过将 package.php 文件中的 packagestring 获取为:

if(!isset($_GET["packagestring"])){
 header('location:index.php');
}elseif (isset($_GET["packagestring"])) {
 $getpackage = $_GET["packagestring"];
}

到这里就可以了,意思是 package.php 页面现在,我想跳转到 book_package.php,下面是我点击 package book 按钮时的 package.php POST 代码:

 function php_slug($string)  
{  
    list($packageid, $packagename) = explode(":",$string);
   $url = $packageid."/".strtolower(str_replace(' ', '-', $packagename));
  $slug = preg_replace('/[^a-z0-9-]+/', '-', trim(strtolower($url)));  
  return $url;  
} 

if(isset($_POST["booknow"])){
  $retvalue=$_POST["booknow"];
    var_dump($retvalue);
    header("location:book_package.php");
 }

以下是获取字符串值的 book_package 代码:

if(!isset($_GET["booknow"])){
   header('location:index.php');
}elseif (isset($_GET["booknow"])) {
    $getpackage = $_GET["booknow"];
    var_dump($getpackage);
}

这次请求的文件是book_package,上面提到了htaccess代码..

在这里我无法跳转到 book_package.php 页面 我在同一页面上(package.php),但新网址为:

http://localhost/xyz/package/2/book_package.php

我想要 http://localhost/xyz/book_package/2/temp-temp-temp

我觉得还可以

【讨论】:

  • 似乎没有人使用多个规则。安静奇怪?
  • 您好,我已经解决了上述问题...非常感谢
猜你喜欢
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 2016-12-05
  • 2012-04-29
  • 2012-08-25
  • 2014-04-09
  • 1970-01-01
相关资源
最近更新 更多