用于地址栏位置的Apache重写规则

时间:2012-02-22 07:20:37

标签: php apache .htaccess mod-rewrite seo

我目前正在尝试制作重写规则,在地址栏中显示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>

但网址仍会显示为http://mywebsite.com/index.php?action=login

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

1 个答案:

答案 0 :(得分:3)

以下是您可以使用的内容(静态版本):

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]

这将自动使用任何字母(我添加了短划线和数字 - 如索引,联系人或联系我们)并将其用作“操作”。因此,在您的脚本中,您可以检查其中一个是否被接受(例如某人类型:不是一个好页面)然后您可以重定向到404.这样,您的脚本控制逻辑而不是.htaccess。 / p>