如何使用Apache Mod_rewrite在.htaccess中创建一个简单但灵活的Clean URL


How to create a simple but flexible Clean URL in .htaccess with Apache Mod_rewrite?

我刚刚开始熟悉Apache Mod_rewrite,但我未能实现我的目标。

我正在建立一个网站,我想用干净的、用户友好的URL取代丑陋的URL。我目前已经创建了一些文件,但我不确定是否会创建干净的URL,我需要这些页面中的许多。

我有两个问题,关于专业人士如何创建这个网站,我们开始:

第一个问题:

我有以下文件结构,你可以在下面看到:

主文件夹:

  • index.php(主页)
  • login.php(登录页面)
  • register.php(注册页面)

    在主文件夹下,我有:成员文件夹:

    • index.php(仪表板页面)
    • stats.php(统计页面)

第一个问题如下:

我目前只是使用简单的.php页面来访问它的内容。当有人输入以下内容时,使用1个index.php文件并包含必要的文件会更好吗?例如:/index.php?go=login那么,这会比仅仅提供.php文件并在点击时提供它们的内容更专业吗?

第二个问题:

这个问题将围绕干净的URL。我想实现以下目标:

当有人访问时:http://www.example.com/index.php - it should redirects them to http://www.example.com/

当有人访问时:http://www.example.com/login.php-应该将他们重定向到http://www.example.com/login/-如果有人键入http://www.example.com/login,也应该处理login.php

以及其他页面,如:

http://www.example.com/register.php<->http://www.example.com/register/(斜线应为可选)http://www.example.com/members/dashboard.php<->http://www.example.com/dashboard/(斜线应为可选)

等等…

我已经尝试创建一个重写条件,但它似乎不起作用。有人能告诉我最新情况吗?

我尝试过的:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^login/?$ login.php [NC]

我真的希望有人能帮我回答这两个问题。我已经搜索了两天了,我不知道应该使用什么重写规则。非常感谢!

编辑:

我应该使用基本的重定向并使用PHP处理其他代码吗?请有人帮帮我!

这个(未测试的)代码应该采用something.php并重定向到/something

此外,它应该允许你继续做/search?query=foo之类的事情,这将相当于/search.php?query=foo

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(test|login|whatever)/?$ $1.php/$2 [NC,L]