【问题标题】:Rewrite rules for localhost AND live environment重写本地主机和实时环境的规则
【发布时间】:2016-01-07 19:13:20
【问题描述】:

我想添加在本地环境 (localhost) 和我的 liveserver 上工作的重写器。

为什么?

当我在本地测试我的项目并将其上传到实时服务器时,我不想更改规则。

  1. 添加规则

    这里是一个例子

    (ANY-URL)index.php?page=somepage
    

    改成

    (ANY-URL)/somepage
    

    所以我使用了一个 rewritemod 生成器并将其粘贴到其中:

    index.php?page=somepage
    

    我得到的重写规则是这样的:(当然我的 .htacces 以 RewriteEngine On 开头)

    RewriteRule ^([^/]*)$ /?page=$1 [L]
    

    当我尝试访问 (http:) //localhost/myproject/development/index.php?page=login 时,它会将我发送到本地开发环境的根目录。但是地址行中的 URL 没有改变。

  2. 测试

    当然,我尝试了一些其他规则,将整个 URL 粘贴到生成器中,只是为了测试重写是否有效。 同样在这里,URL 不会更改为短 url,但服务器无法再找到样式表和 javascript。我被重定向到 index.php

  3. 可能的解决方案?

    • 也许它与那个“RewriteBase”有关?
    • 我必须设置基本路径吗?

我的 .htacces 位于此处:

//localhost/myproject/development/.htaccess

稍后我还想更改如下所示的路径:

(ANY-URL)index.php?page=somepage&second=hello&third=world&fourth=cool

另外,我正在寻找一种适用于两种环境的解决方案。

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    由于 htaccess 位于子目录内,请使用 RewriteBase:

    RewriteEngine On
    RewriteBase /myproject/development/
    

    完成后,您可以在 php/html 文件中使用 base 元素。这将解析页面中脚本/样式表的地址。

    <base href="/myproject/development/" />
    

    现在,htaccess 中的重写将是:

    RewriteRule ^((?!index\.php)[^/]+)/?$ index.php?page=$1 [L]
    

    【讨论】:

    • 谢谢!所以我使用多个 .htacces 文件(在不同的子文件夹中)?
    • @Fdev 如果你愿意。您还应该通过:stackoverflow.com/q/20563772/1190388
    • 谢谢,到目前为止它工作正常。似乎它只适用于一个方向(从长 URL 到短 URL)我认为我需要另一个重写器来完成从短 URL 到长 URL 的相同工作。 PS:我不需要 HTML 中的基本元素 - 只需要 .htaccess-file 中的 RewriteBase :)
    • 当我将项目上传到[myproject].com 时,我需要用 rewritebase 做什么?删除它?
    • @Fdev 是的!或者,您可以将其更改为RewriteBase /
    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 2018-05-06
    • 2014-11-30
    • 2016-10-07
    • 1970-01-01
    • 2014-01-23
    • 2014-07-23
    • 1970-01-01
    相关资源
    最近更新 更多