地址栏位置的Apache重写规则


Apache Rewrite Rules for address bar location

我目前正在尝试制定一个重写规则,该规则将显示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风格的链接。

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

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.