【问题标题】:How to control .htaccess with php or how to input php code inside .htaccess file如何使用 php 控制 .htaccess 或如何在 .htaccess 文件中输入 php 代码
【发布时间】:2015-08-12 12:08:30
【问题描述】:

我不太擅长 .htaccess,所以我不知道它是如何工作的,我有一个网站和我的网站链接,就像这样:mysite.com/pagee.php?menu_id=1 我使用这个 .htaccess 代码:

<IfModule mod_rewrite.c>
RewriteEngine on

# 1-level
RewriteRule ^home/{0,1}$  pagee.php?menu_id=1 [QSA,L]


</IfModule>

它就是这样工作的:mysite.com/home/

但我的问题是我有很多类似的页面:

mysite.com/pagee.php?menu_id=2,mysite.com/pagee.php?menu_id=3, mysite.com/pagee.php?menu_id=4, mysite.com/pagee.php?menu_id=5, mysite.com/pagee.php?menu_id=6,

而我的 pagee.php 代码是:

    <?php
require_once('config2.php');

$menu_id = intval($_GET['menu_id']);

$query = "SELECT * FROM menu WHERE `menu_id`=$menu_id";
$result = mysql_query($query);


while($row = mysql_fetch_assoc($result))
{

    echo '<h1>'.$row['mname'].'</h1>';

}

?>

pagee.php 与 mysql 配合使用

那么当代码在.htaccess 中工作时如何像这样:

    <IfModule mod_rewrite.c>
RewriteEngine on

# 1-level
<?php

$query = "SELECT * FROM menu WHERE `menu_id`=$menu_id";
$result = mysql_query($query);


while($row = mysql_fetch_assoc($result))
{
    $menu_id=$row['menu_id'];
    $linkname=$row['linkname'];


    echo 'RewriteRule ^'.$linkname.'/{0,1}$  pagee.php?menu_id='$menu_id' [QSA,L]';

} ?>


</IfModule>

【问题讨论】:

  • stop using mysql_* functions。它们不再被维护并且是officially deprecated。改为了解 prepared statements,并考虑使用 PDO,it's not as hard as you think
  • 尝试将所有调用重定向到 pagee.php 的解决方案。然后验证对您的数据库表的请求。如果有效,继续,如果没有找到,404 header
  • 你想要一个类似 domain/menu/1 的链接吗?
  • @Starkeen:不,我不会像 domain.com/home 那样做。
  • @Starkeen:先生,在我的 mysql 数据库中,我失去了生成的链接,但我的 .htaccess 文件没有像我的 pagee.php 那样自动生成?

标签: php mysql apache .htaccess mod-rewrite


【解决方案1】:

PHP 无法控制 .htaccess 好的,但您也可以通过写入和重写 .htaccess 文件来控制它,我可以理解,但我认为这不能正常工作。不过你也可以试试,

创建了一个function 并在里面这样做:

function edit_hta() {

    echo "<IfModule mod_rewrite.c> \r\n
\r\n RewriteEngine on \r\n";

    require('config2.php'); $getquery=mysql_query("SELECT * FROM menu ORDER BY menu_id DESC"); while($rows=mysql_fetch_assoc($getquery)){$menu_id=$rows['menu_id']; $linkname=$rows['linkname'];

echo "\r\n RewriteRule ^".$linkname."/{0,1}$  pagee.php?menu_id=".$menu_id. "[QSA,L] \r\n"; }

    echo "\r\n </IfModule>";

}

好的,然后制作表单、文本区域和提交按钮

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
      <label>
        <textarea name="edit_ht" cols="45" rows="5"><?php echo edit_hta(); ?></textarea>
      </label>
      <input name="submit" type="submit" value="Edit" />
    </form>

比在该页面内进行 php 编码:

$submit = $_POST['submit'];

if ($submit) {

$edit_ht = file_put_contents('.htaccess', $_POST['edit_ht']);

}

我希望可以做得很好,所以最重要的是,如果你的 sql 数据库中有很多页面,首先你必须创建所有页面,而不是你在 from 表中看到的所有页面,所有链接都显示在 textarea 中像这样:

<IfModule mod_rewrite.c> 


 RewriteEngine on 

RewriteRule ^asasasa/{0,1}$  pagee.php?menu_id=10[QSA,L]

RewriteRule ^zxzxzx/{0,1}$  pagee.php?menu_id=9[QSA,L]

RewriteRule ^movie/{0,1}$  pagee.php?menu_id=8[QSA,L] 

 RewriteRule ^song/{0,1}$  pagee.php?menu_id=7[QSA,L] 

 RewriteRule ^software/{0,1}$  pagee.php?menu_id=6[QSA,L] 

 RewriteRule ^home/{0,1}$  pagee.php?menu_id=5[QSA,L]

 </IfModule>

然后你点击编辑按钮然后你的 .htaccess 文件将被编辑,通过这种方法你可以控制你的 .htaccess 文件。 希望你理解,如果你不给我评论。 谢谢。

【讨论】:

    【解决方案2】:

    试试这个:

    RewriteEngine on
    
    RewriteRule ^home/?$ /page.php?menu_id=$1 [QSA,NC,L]
    
    RewriteRule ^music/?$ /page.php?menu_id=$2 [QSA,NC,L]
    
    RewriteRule ^movie/?$ /page.php?menu_id=$3 [QSA,NC,L] 
    
    RewriteRule ^link_name4/?$ /page.php?menu_id=$4 [QSA,NC,L]
    
    RewriteRule ^link_name5/?$ /page.php?menu_id=$5 [QSA,NC,L] 
    
    
    RewriteRule ^link_name6/?$ /page.php?menu_id=$6 [QSA,NC,L] 
    

    请务必将路径名称 4、5、6 重命名为您的路径名称

    【讨论】:

      猜你喜欢
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      相关资源
      最近更新 更多