【问题标题】:How to create Clean URL for every page using .Htaccess?如何使用 .Htaccess 为每个页面创建干净的 URL?
【发布时间】:2013-12-07 17:54:15
【问题描述】:

我目前正在创建一个大型网站,但我想使用干净/用户友好的 URL,而不是常规 URL。我一直在寻找如何基本上根据我的需要定制这些 Apache Mod Rewrite 规则,但是我找不到针对我的特定问题的任何解决方案。

您可以在下面阅读我想通过 URL 实现的目标(我不会每次都写域名,想象一下:http://www.example.com 在 URL 部分之前)。

/register/ OR /register ---> /register.php(它应该支持这两种变体。)

我实际上有更多用于注册的文件,我希望它们可以使用“部分”字样进行访问,例如:

/register/part1/ OR /register/part1 ---> /register.php?part=1(它应该支持这两种变体。)

另外,如果我有多个查询变量怎么办? (如“personal=1”)

/register/part1/personal//register/part1/personal ---> /register.php?part=1&personal=1

如果我有更多这样的查询,但我之前无法指定所有这些怎么办?可以输入其中任何一个。 (如“事物、姓名、工作等”)

/register/part1/personal/Nicky//register/part1/personal/Nicky ---> /register.php?part=1&personal=1&name=Nicky

或任何你能想象到的变化:

/register/part1/personal/thing/employee//register/part1/personal/thing/employee ---> /register.php?part=1&personal=1&thing=1&job=employee

编辑: 这是我已经尝试过的,但它只是将页面重定向到 index.php :/

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

所以我给了你很多例子,我想基本上实现什么。除了“register.php”之外,我还有很多其他页面,所以它不应该只针对那个页面。我还想要一个非常重要的东西,如果有人去例如:register.php?part=1 它应该将他们重定向到适当的 Clean URL(当然在 PHP 中)。

我还想问我应该在 PHP 端做什么才能让一切都好起来?我看到 Wordpress 有一个非常棒的解决方案,它非常自动化,而且看起来很棒!

有人可以向我解释如何为此创建一个出色的 .HTACCESS mod_rewrite 解决方案吗?我会非常非常高兴!

请不要将此问题标记为重复,因为我确实没有找到任何针对我的案例的具体内容。

【问题讨论】:

  • 而不是使用笨重的 htaccess 文件直接通过您的 index.php 文件的所有请求,并让 PHP 通过解析 REQUEST_URI 为您处理路由和重定向
  • 很高兴了解所有广泛的要求。请向我们展示您自己解决此问题的尝试。
  • 我已经更新了我的示例,尝试了 HTACCESS。
  • @PeeHaa 专业人士总是这样做吗?我需要一个专业的方法来解决这个问题。
  • 如果您的要求是“专业方法”,则该要求是错误的。专业人士只会告诉您您已为此付费,而不会告诉您技术正确性。

标签: php apache .htaccess mod-rewrite clean-urls


【解决方案1】:

你提到了 WordPress,has something like this:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

它的作用是将任何与真实文件或目录不匹配的请求重定向到index.php 脚本。然后该脚本将决定显示哪个页面。它将通过查看 $_SERVER['REQUEST_URI'] 来实现,该路径包含类似 register/part1 的路径。

使用此方法更容易确定要显示的页面,因为在 PHP 中有很多方法可以解析该路径字符串,然后将其映射到函数

【讨论】:

    【解决方案2】:

    您应该能够从您的 htaccess 中构建像这样的干净 URL:

    RewriteEngine On
    RewriteRule ^index\.html$ /index.php?pageID=Home [L]
    RewriteRule ^about-my-homepage\.html$ /index.php?pageID=About [L]
    RewriteRule ^contact-us\.html$ /index.php?pageID=Contact [L]
    

    第一个是你想要输出的(“干净”的 URL),第二个是你真正想要打开的。祝你好运!

    【讨论】:

      猜你喜欢
      • 2013-09-22
      • 1970-01-01
      • 2014-02-09
      • 2015-02-25
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      相关资源
      最近更新 更多