繁体   English   中英

如果禁用Mod-Rewrite,如何使PHP应用程序使用实际URL?

[英]How To Make PHP Application To Use Actual URL's If Mod-Rewrite Is Disabled?

我正在一个PHP应用程序上,一切正常,唯一的问题是。

我启用了SEO友好网址,该网址将实际网址重写为虚拟网址(我知道你们都知道)

例如:hxxp://www.website.com/index.php?page = about-us至hxxp://www.website.com/page/about-us/

我要实现的是,如果SEO URL的/ Mod Rewrite被禁用,则用户应该能够访问直接/实际的URL。

简而言之,如果启用了Mod-Rewrite,则Web应用程序应自动使用SEO友好URL,否则将使用默认URL。

您将必须使用检查mod_rewrite是否可用或更可能是config值的函数替换所有出现的链接。 然后它将返回适当的链接。

getLink("?page=about-us")

如果Apache不理解您的规则,请使用<IfModule>避免破坏其他.htaccess指令和500个内部服务器错误。 还添加一个非重写重写(在所有其他重写之前);

<IfModule mod_rewrite.c>
    RewriteEngine On
    #The next rule does no rewriting, but sets en environmental variable.
    RewriteRule .* - [E=RewriteCapable:On]
</IfModule>

在您的文件中(存储为设置或检查生成/输出网址的位置):

if(isset($_SERVER['RewriteCapable'])){
    //make fancy urls
} else {
    //cludgy old-style urls
}

嗯..这可能需要一些思考才能获得正确的解决方案..如果您愿意的话,请在这里关注我:)

SEO URL的主要介绍是(1)在URL中包含人类可读的文本,以及(2)摆脱GET参数。

暂时看一下第(2)点,这最初是主要驱动因素,因为人们使用about.php?id = 1,id = 2 ... id = 3457348多次获得了在搜索引擎中列出的同一页面,这当然会被检测到并停止,然后有时人们会通过一个会话id = 24234234,该会话也将作为重复页面而停止(正确的做法是,因为它使用HTTP作为有状态协议,但并非如此)。

对于URL,从第一个字符到#片段的#都定义了一个资源(从HTTP角度来看),因此正确的做法是,当几个不同的URL全部解析为相同的“页面”时,它们实际上是重复的。

因此,通过否定GET参数,您可以解决此问题,该问题现在已经不是问题,而且已经存在很长时间了,除了虚荣之外,没有理由不正确使用GET参数。

因此,实际上您没有解决任何问题,而是引入了一个新问题,因为您希望'/ page / about-us'和'?page = about-us'都进入同一个'page',这意味着您已经再次获得重复的资源,这可能会被检测到并且您可能会受到处罚。

因此,通过引入“ SEO URL”,您实际上已经创建了SEO URL被“发明”以抵消的问题。

这只剩下关于URL中人类可读单词的要点。 URL应该是透明的,因此它们实际上不算任何东西,但是有些仍然像-所以我不得不问使用'/?/ page / about-us'是怎么回事...如果不这样做'不是那样的话,那么用文件系统路径'/ page / about-us'创建一个固定文件怎么办呢?该文件系统只包含设置了正确变量的index.php?

当然,您可以创建重复的页面,并同时具有SEO友好的URL和GET参数URL,但是如您所见,这将不再是SEO友好的吗?

嚼点东西:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM