代码之家  ›  专栏  ›  技术社区  ›  errerr

htaccess重写引擎URL解释

  •  0
  • errerr  · 技术社区  · 7 年前

    最近,我改变了我的网站工作方式——每篇文章都有物理页面,而不是动态加载内容,没有物理(子)页面,但我意识到我不能简单地上传新的网站文件,因为我会破坏所有社交平台共享链接、计数器和东西,因为实际上有数千个子页面。

    我听说(我知道)via。htaccess和RewriteEngine(我需要使用RewriteEngine,因为htaccess中的所有代码都是为其编写的)我可以根据实际URL在内部加载完全不同的页面,例如,如果我有指向我的一个子页面的实际URL链接:

    http://sub.mypage.com/php/somearticle.php?j=en

    。。。因此,在不更改URL文本的情况下,它将按照不同的原则在内部加载我的新网站文件,如下所示:

    http://sub.mypage.com/?s=somearticle&j=en

    现在我还需要这些变量“j”和“somearticle”是动态的,或者更好的说法是,它们需要完全按照地址栏中的物理URL复制(其中“somearticle”实际上是原始物理php文件的名称,“j”只是语言变量),因为每次都是其他内容,所以我不必在htaccess中为每个具体子页面制作数千行代码- 我需要一些通用代码来管理所有子页面 (因为原则对所有人都是一样的,只是php名称发生了变化,有时语言=变量“j”),看到了吗?

    那么,有谁能帮我告诉我实现这一目标的确切语法/代码吗?

    编辑

    因此,我自己也在玩它,如果我手动设置子页面,这似乎是可行的(注意:只是一个澄清-这是针对我的本地主机:8081,因此我有第一个条件,服务器的cos,我有不同的版本,有不同的索引路径。php)+我稍微将变量j part thanx更新到@Ben的帖子:

    # LOAD PAGE DIFFERENT INTERNALLY - LOCALHOST
    RewriteCond %{HTTP_HOST} ^localhost:8081 [NC]
    RewriteCond %{REQUEST_URI} /php/(.*)\.php$ [NC]
    RewriteRule ^php/(.*).php$ /WWW/_PHP_/lego/index.php?s=$1 [QSA,L]
    

    但不幸的是出于某种原因 它影响我网站上的每个页面,而不仅仅是/php下的页面/ ,所以当我点击进入我的第一个(default/initial=index.php)页面时,它会将其破坏(它包含所有文章的摘要-它们没有加载)-有人知道为什么吗?

    已解决

    因此,在对@Ben的代码进行了一些小的更改之后,这是正确的解决方案,因此我认为他的解决方案是正确的(因为如果页面位于服务器上,那么它实际上可以立即正常工作,因为我的测试版本位于本地主机上,指向/php/目录的路径不同))

    LOAD PAGE DIFFERENT INTERNALLY - localhost
    RewriteCond %{HTTP_HOST} ^localhost:8081 [NC]
    RewriteCond %{REQUEST_URI} /php/([a-zA-Z0-9\-]+).php [NC]
    RewriteRule ^ index.php?s=%1 [QSA,L]
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Ben    7 年前

    REQUEST_URI 是请求URI的路径组件,如 /php/somearticle.php ,但不包含查询字符串,如 ?j=en

    重写模式, ! 字符(感叹号)用于否定条件的结果。要使用某种模式作为前缀,请使用 ^ 字符(插入符号),匹配行首。

    %1 是RewriteCond反向引用,它提供对模式分组部分(括号中)的访问。

    QSA 标志,如果替换URI包含查询字符串,则查询字符串 ?j=en 将附加到新的重写uri。

    RewriteCond %{REQUEST_URI} ^/php/([a-zA-Z0-9\-]+).php [NC]
    RewriteRule ^ index.php?s=%1 [QSA,L]
    

    另请参见: Apache Module mod_rewrite ,则, RewriteRule Flags