Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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/8/.htaccess/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 写入.htaccess规则_Php_.htaccess - Fatal编程技术网

Php 写入.htaccess规则

Php 写入.htaccess规则,php,.htaccess,Php,.htaccess,我已经有了url中带有参数的站点。现在我正在考虑为用户创建干净的url,以避免url中的参数。我研究了.htaccess规则(mod rewrite),但有一件事我不明白,我是否需要更改所有位置的url,以便htaccess中的规则可以工作?我觉得这是更乏味的,因为我需要找到的地方,并改变它,以清除网址。例如,我有和。我把规则写成 RewriteEngine On RewriteRule ^([^/]*)\.html$ /?view=$1 [L] 如果我去输入mystie.com/about.

我已经有了url中带有参数的站点。现在我正在考虑为用户创建干净的url,以避免url中的参数。我研究了.htaccess规则(mod rewrite),但有一件事我不明白,我是否需要更改所有位置的url,以便htaccess中的规则可以工作?我觉得这是更乏味的,因为我需要找到的地方,并改变它,以清除网址。例如,我有和。我把规则写成

RewriteEngine On
RewriteRule ^([^/]*)\.html$ /?view=$1 [L]

如果我去输入mystie.com/about.html或mysite.com/contact.html,这很好用。但现在的问题是,我需要在编码中找到位置,并将所有view=about或view=contact更改为about.html或contact.html。在这种情况下,它可能很简单,因为它只是我需要更改的标题。但是如果有url,如view=showdata?user=dsdsdsa&aga=12…我无法找到所有提到和更改的地方。有什么简单的方法或聪明的方法吗?谢谢您的帮助。

您必须重新设计代码

但是,有机会以编程方式重新映射,以牺牲性能为代价

由于您在PHP上运行,因此可以使用输出缓冲的ob函数来:

  • 启动时缓冲输出
  • 渲染完所有页面后,检索并清除缓冲区内容
  • 应用正则表达式转换URL
  • 将修改后的缓冲区写入输出流

  • 显然,您需要在PHP脚本中映射一组规则。很抱歉,我没有提供任何代码,但我在几年前就这样做了,基于我找到的其他代码。但是方法很简单。

    重写规则只会影响以
    .html
    结尾的URL。因此,直接指向
    index.php
    的链接应保持完全正常。不过,这些丑陋的链接会被搜索引擎发现并出现在搜索结果页面中

    根据当前的重写规则,包含参数(如
    user=dsdsdsa
    )的URL不能重写为干净的URL(如
    /showdata.html?user=dsdsdsa
    )。这是因为如果在重写规则的替换子字符串中包含查询字符串,Apache将删除其他参数。您可以通过使用
    [QSA]
    标志来避免这种情况。有关更多详细信息,请参阅


    我不能说如何在PHP代码中找到所有丑陋的链接。您可能需要查看
    视图=
    存在的每个地方并手动更新它。

    如果我理解您的问题,您会问是否需要更改代码中所有硬编码的URL

    本例中的答案是否定的,您不需要更改URL,更改URL时使用
    mod_rewrite
    的优点是旧URL保持活动状态。如果您直接在浏览器中键入URL,也无所谓,如果您单击页面中的链接,它们将生成相同的HTTP请求(除了引用者)


    当然,您可以逐步更改代码,使其使用真实的URL,以避免混淆。

    谢谢。。我试图理解htaccess中的规则如何工作,而不必编辑代码中的所有URL,如mysite.com/index.php?view=showdata&userddsda&id=33。