【问题标题】:Rewrite URL is not working from localhost重写 URL 在本地主机上不起作用
【发布时间】:2015-07-28 14:25:09
【问题描述】:

我一开始尝试用 .htaccess 隐藏我的 .php 扩展名。在文件中包含这个后它确实可以正常工作

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

并且还包括在我的function.php中

//==== Strip .php extension from requested URI  
function strip_php_extension()  
{  
  $uri = $_SERVER['REQUEST_URI'];  
  $ext = substr(strrchr($uri, '.'), 1);  
  if ($ext == 'php')  
  {  
    $url = substr($uri, 0, strrpos($uri, '.'));  
    redirect($url);  
  } 
}  

//==== Redirect. Try PHP header redirect, then Java, then http redirect
function redirect($url)  
{  
  if (!headers_sent())  
  {  
    /* If headers not yet sent => do php redirect */  
    header('Location: '.$url);  
    exit;  
  }  
  else  
  {
    /* If headers already sent => do java redirect */  
    echo '<script type="text/javascript">';  
    echo 'window.location.href="'.$url.'";';  
    echo '</script>';  

    /* If java is disabled => do html redirect */  
    echo '<noscript>';  
    echo '<meta http-equiv="refresh" content="0; url='.$url.'" />';  
    echo '</noscript>';  
    exit;  
  }  
} 

问题是动态页面的 url 没有改变.. 我还有 page.php?p=5 并且 blog.php?post=5 不会更改为 page?p=5 和 blog?post=5..

我确实想将上述动态页面 url 更改为类似 www.yourdomian.com/5 的 page.php 和 www.yourdomain.com/blog/5 的博客,但这不是从我的在 htacces 中重写规则

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ page.php?p=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ page.php?p=$1

请指出我做错了什么的正确方向。以及如何解决它。

【问题讨论】:

  • 您的 .htaccess 在哪里?
  • 我的应用程序的根目录。 index.php 在哪里
  • about-us.php 在哪里?内部/Applications/MAMP/htdocs/MyApp/Applications/MAMP/htdocs/
  • 在 /Applications/MAMP/htdocs/MyApp/

标签: php regex .htaccess mod-rewrite seo


【解决方案1】:

您可以在/MyApp/.htaccess中使用这些规则:

Options -MultiViews
RewriteEngine On
RewriteBase /MyApp/

RewriteCond %{THE_REQUEST} /page\.php\?([a-z])=([^&\s]+)
RewriteRule ^ %1/%2? [R=302,NE,L]

RewriteCond %{THE_REQUEST}  /blog\.php\?post=([^&\s]+) [NC]
RewriteRule ^ blog/%1? [R=302,NE,L]

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

RewriteRule ^blog/([^/]+)/?$ blog.php?post=$1 [L,NC,QSA]

RewriteRule ^([a-z])/([^/.]+)/?$ page.php?$1=$2 [L,QSA]

【讨论】:

  • 它适用于 page.php,但我有两个问题。在我的动态页面 (page.php) 上应该有两个 GET 请求 .. page.php?p=$1 和 page.php?s=$1.. 如何在 htaccess 文件中包含最后一个条件?并且博客重写条件输出 500 错误。感谢您的光临。
  • foobar 不能同时出现在两者中。有没有办法将两个网址视为不同的元素
  • 您介意为此写条件吗,但请使用扩展名 page.php.. 因为我是父页面
  • This is not suporting page.php?s= only page.php?p= is supported by the rewrite condition
  • 是的,但它会影响所有包含的文件,因为它们无法被跟踪。这意味着我编辑包含文件也会影响其他页面......一直在尝试而不是尝试......
猜你喜欢
  • 1970-01-01
  • 2014-10-31
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
相关资源
最近更新 更多