在HTACCESS重写并使用$ _SERVER ['PHP_SELF']后,页面源仍显示原始页面名称

时间:2015-12-02 18:34:08

标签: php .htaccess url-rewriting rewrite canonical-link

我正在使用htaccess重写功能,在点击时将名为cities.php的页面名称更改为链接的城市页面。例如,如果单击Aliso Viejo的链接,您将看到:

的Aliso-Viejo的板坯泄漏-detection.php

我的htaccess的重写部分如下:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} !^$
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTPS}s ^on(s)|
    RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301]
    RewriteRule ^([a-z]+)-slab-leak-detection.php$ cities.php?city=$1&state=$2
    RewriteRule ^([a-z-]+)-slab-leak-detection.php$ cities.php?city=$1&state=$2
    RewriteRule ^(.*)\.html$ $1.php [L]
    ErrorDocument 404 /index.php

现在重写按预期工作。问题在于我正在使用的规范链接:

    $_SERVER['PHP_SELF']

回显页面网址以进行索引。它不是回显重写的页面名称,而是回显原始的cities.php名称。搜索引擎也将索引预先重写的页面。

我假设我的代码顺序错误,或者没有正确编码以静默编写而不是动态编写。

请记住,我对高级的httaccess编码非常不熟悉,我使用的代码来自我研究过的更改信息。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我不认为$_SERVER['PHP_SELF']的值受.htaccess重写的影响,因为它引用了文件系统,而不是URL。

如果您需要引用该网址,请使用$_SERVER['REQUEST_URI']

修改

刚刚找到这个相关的问题/答案:Can PHP access the .htaccess rewrite name of a file。 Regilero对所选答案的评论很有助于在输出$_SERVER['REQUEST_URI']之前逃避using System; namespace Program { class Program { static decimal[,] factors = new decimal[4, 4] { /* To Milli To Micro To Nano, To Pico */ /* From Milli */ { 1m, 1000m, 1000000m, 1000000000m }, /* From Micro */ { 0.001m, 1m, 1000m, 1000000m }, /* From Nano */ { 0.000001m, 0.001m, 1m, 1000m }, /* From Pico */ { 0.000000001m, 0.000001m, 0.001m, 1m } }; static void Main() { Console.WriteLine("SI converter!"); while(true) { Console.Write("Please, enter value: "); decimal value = Convert.ToInt32(Console.ReadLine()); Console.Write("\n1) Milli(m)\n2) Micro(µ)\n3) Nano(n)\n4) Pico(p)\nFrom Units: "); int fromUnits = int.Parse(Console.ReadLine()) - 1; Console.Write("To Units: "); int toUnits = int.Parse(Console.ReadLine()) - 1; decimal factor = factors[fromUnits, toUnits]; decimal answer = factor * value; Console.WriteLine("The answer is : " + answer); Console.Write("Go again? (Y/N): "); string ans = Console.ReadLine(); if(ans.ToUpper() == "N") break; } } } } 的价值:

  

请注意,在使用构建HTML内容之前,您应该转义$ _SERVER [' REQUEST_URI'],避免用户在网址中注入HTML / js。有关SCRIPT_NAME与REQUEST_URI的详细信息,请访问stackoverflow.com/a/326331/550618