【问题标题】:Apache Rewrite Rules for address bar location地址栏位置的 Apache 重写规则
【发布时间】:2012-03-12 12:50:16
【问题描述】:

我目前正在尝试制定一个重写规则,该规则将在地址栏中显示http://mywebsite.com/login/,但实际上是从http://mywebsite.com/index.php?action=login 读取的。我尝试了以下方法:

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([a-z0-9\-]+)/?$ /?$.php?page=$1 [L,NC]
</IfModule>

不过,该 URL 仍显示为 http://mywebsite.com/index.php?action=login

基本上,我想我想要一个 SEO 风格的链接。

【问题讨论】:

  • 您只想重定向“home”、“blogs”和“login”?
  • 我现在想重定向“index”、“blogs”、“projects”、“contact”和“login”。

标签: php apache .htaccess mod-rewrite seo


【解决方案1】:

这是你可以使用的(静态版本):

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(index|blogs|projects|contact|login)/?$ index.php?action=$1 [L,NC]

如您所见,每个“页面”都硬编码在 () 之间的规则中。

你也可以让它更“动态”:

RewriteRule ^([a-z0-9\-]+)/?$ index.php?action=$1 [L,NC]

这将自动使用任何字母(我添加了破折号和数字 - 例如索引、联系人或联系我们)并将其用作“操作”。因此,在您的脚本中,您可以检查其中一个是否不被接受(例如,某人键入:not-a-good-page)然后您可以重定向到 404。这样,您的脚本控制逻辑而不是 .htaccess。

【讨论】:

  • 当我尝试使用$_GET['page']; 时,当我尝试加载mysite.com/anything_here 时却找不到它,有没有特定的使用方法?
  • 应该是:$_GET['action'],如果你想用page可以把规则改成:RewriteRule ^(index|blogs|projects|contact|login)/?$ index.php?page=$1 [L,NC]
  • 我改变了它们,但它仍然不接受我的页面参数。
  • 我将 /?$.php?page=$1 从您的规则更改为:index.php?action=$1,然后我进入 PHP(当我 print_r(_$GET)):Array ( [page] =&gt; login )http://www.domain.com/login。您的 apache 配置中还有其他规则吗?
猜你喜欢
  • 2013-02-15
  • 2016-05-30
  • 2011-09-02
  • 2011-10-26
  • 1970-01-01
相关资源
最近更新 更多