【问题标题】:htaccess RewriteEngine URL interpretationhtaccess RewriteEngine URL解释
【发布时间】:2018-04-05 23:34:50
【问题描述】:

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

我听说(我知道)通过 .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 名​​称,有时还有 language = variable "j"),你明白吗?

那么任何人都可以帮我告诉我实现这一目标的确切语法/代码吗?

编辑

所以我自己玩了一下,如果我手动设置子页面,这似乎可以工作(注意:只是一个澄清 - 这是我的 localhost:8081 因此我已经为我的服务器设置了第一个条件 cos不同的版本,具有不同的 index.php 路径)+ 我稍微更新了变量 j 部分 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/下的页面,所以当我点击转到我的第一个(默认/初始 = 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]

【问题讨论】:

    标签: php .htaccess url redirect


    【解决方案1】:

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

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

    %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_rewriteRewriteRule Flags

    【讨论】:

    • 感谢您的回复,但您的解决方案不起作用(+ 它不包含原始 URL = 变量 j 附带的 acount 变量)而我在初始帖子中更新的解决方案(编辑 - 你注意到了吗?)工作完全符合预期,但不幸的是,它只是破坏了我的 INDEX.PHP,所以我需要找到原因......你能帮我解决这个问题吗?由于某种原因,它似乎也适用于 index.php,当然它不应该适用(它应该只适用于以“/php/somearticle.php”结尾的 URL)... :-(
    • 好的,Ben,我重新检查了您的解决方案并进行了一个小改动 - 删除了 ^ 符号,因为我的本地主机 www 位置不同,并且从本地主机服务器的角度来看 /php/ 不在root - 它实际上工作得很好,所以我认为你的解决方案是正确的,非常感谢!
    猜你喜欢
    • 2014-11-15
    • 2016-01-21
    • 2013-08-23
    • 2020-10-27
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    相关资源
    最近更新 更多