【问题标题】:Rewriting URLs that work from subfolder and root重写从子文件夹和根目录工作的 URL
【发布时间】:2015-04-06 02:22:39
【问题描述】:

我建立了一个具有 SEO 友好 URL 的网站,实时网站上的 URL 类似于:http://www.somesite.com/seo/friendly/url

我还有一个用于测试站点的登台服务器。在此服务器上,URL 看起来像这样:http://127.0.0.1/~somesite/seo/friendly/url

现在,SEO url 在实时站点上工作,但在测试中失败,因为 .htaccess 中的替换也将 /~somesite 子字符串捕获为变量。

如何从我的 index.php 所在的位置开始替换?

这是我现在使用的替换代码:

RewriteRule ^(([\w\-\/])+)$ index.php?page=$1 [L,QSA]

【问题讨论】:

    标签: php apache .htaccess url mod-rewrite


    【解决方案1】:

    我认为这是不可能的,因为将目录路径与其余的 url 片段区分开来是不可能的。最简单的方法是将.htaccess 部署在每个站点的根目录中,而不是实际的 Web 根目录中。在这种情况下,您之前的 RewriteRule 应该就足够了。

    RewriteRule ^([\w\-\/]+)$ index.php?page=$1 [L,QSA]
    

    如果您随后具有以下目录结构并使用以下 URL http://example.com/~mysite/seo/friendly/urlhttp://example.com/sample/test/seo/friendly/url,它们将产生相同的结果 index.php?page=seo/friendly/url

    ~mysite/
      .htaccess
      index.php
    
    sample/
      test/
        .htaccess
        index.php
    

    【讨论】:

    • 不确定...这个波浪号将与完整 uri 一起放置为页面 uri...我认为作者需要以某种方式从参数值中排除它,例如 RewriteRule ^((~mysite)\/([\w\-\/])+)$ index.php?page=$2 [L,QSA]
    • 在这种特定情况下,波浪号不能用作标识符,因为应用程序将部署在多个服务器上,我不知道它们的确切部署路径,也不能为每个服务器创建特定的 .htaccess 文件.有没有办法识别 index.php 启动的基本路径?我猜它的路径 .htaccess 也是一样的。
    • @paishin - 最简单的方法是将您的.htaccess 存储在您网站的根目录中,即~mysite/.htaccess,而不是实际的webroot。如果目录结构最多只有一层,你可以做RewriteRule ^(~[\w\-]?)([\w\-\/]+)$ ~$1/index.php?page=$2 [L,QSA]
    • @Cyclone,我听从了你的建议,但不幸的是它不起作用。 RewriteRule 选择相同的 url,不管它存储在哪里。 RewriteRule ^(~[\w\-]?)([\w\-\/]+)$ ~$1/index.php?page=$2 [L,QSA] 也无法区分 url 的部分路径和 seo 别名,例如 http://example.com/root/aliashttp://example.com/alias/sub-alias
    • @paishin - 看起来很奇怪?这对我来说非常有效。也许.htaccess 以某种方式被缓存?尝试清空浏览器缓存并注意我编辑了上面的规则。
    猜你喜欢
    • 1970-01-01
    • 2020-01-08
    • 2021-11-24
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    相关资源
    最近更新 更多