【问题标题】:.htaccess to get sanitized URLs for portfolio page.htaccess 获取投资组合页面的净化 URL
【发布时间】:2020-07-06 13:13:48
【问题描述】:

为了对我的域中的 URL 进行 SEO 净化,我需要对 .htaccess 文件进行一些调整,但我需要一些帮助。

我有下一个文件:

  • ./index.php
  • ./work.php
  • ./project-page.php

网址应该是:

  • http://example.com/
  • http://example.com/work
  • http://example.com/work/first-project(项目名称取自 项目编号)

第一个问题:我需要在名为work 的文件夹中获取./project-page.php 文件还是从.htaccess 文件重定向?如何?如果答案是第二个,我必须替换该文件中的 URL,例如图像和包含,对吗?

第二个问题:但是如果用户访问http://example.com/work/ 会怎样?我收到该页面不存在的错误,我也需要它才能工作。我不知道在这种情况下最佳做法是什么。

感谢您的回答!


编辑:

我的 .htaccess 中已经有了这个配置

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /

  #### PERSISTENT CONTENT ####

  # RewriteCond %{HTTP_HOST} !^example.com$ [NC]
  # RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME}\.php -f
  RewriteRule ^(.*)$ $1.php


  RewriteRule ^work-(.*)$ project-page.php?id=$1
</IfModule>

所以现在,我可以访问 example.com/work./work.phpexample.com/work-first-project./project-page.php?id=1 但我希望它是 example.com/work/first-project

那么,将./project-page.php 移动到名为/work/ 的新文件夹中更好还是不需要。以及如何使用 .htaccess 或任何其他方法使其以 example.com/work/first-project 的身份工作。

【问题讨论】:

    标签: php .htaccess url


    【解决方案1】:

    您想使用 RewriteRules,例如这些将适用于前两个示例:

    RewriteRule "^/$" "/index.php"
    RewriteRule "^/work$" "/work.php"
    

    https://httpd.apache.org/docs/2.4/rewrite/intro.html#rewriterule

    只要第二个参数指向一个有效的文件,你就可以随意组织你的文件夹。

    您可以在 .htaccess 中将一个 RewriteRule 放在其余部分之前以删除尾部斜杠

    RewriteRule "^(.*)/$" "/$1"
    

    您还可以通过R=301 使用HTTP301(永久)重定向,并确保在使用L 重定向后不再处理任何规则。

    RewriteRule ^(.*)/$ /$1 [R=301,L]
    

    【讨论】:

    • 这并没有解决我的疑问,在主帖中添加更多信息。
    • 您需要将RewriteRule ^work-(.*)$ project-page.php?id=$1 放在RewriteRule ^(.*)$ $1.php 之前,第一个优先并重写URL,一旦发生这种情况,第二个将不再匹配。
    • 发布了关于此的答案。看起来方向不错,但现在删除文件扩展名有问题。
    【解决方案2】:

    无法让它工作。正如肖恩建议的那样,我将删除斜杠放在其他句子之前的顶部。现在破坏整个文件的是最后一句话。最初是为了删除文件扩展名。如果我删除那个东西,其他的就可以了。

    <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteRule ^(.*)/$ /$1 [R=301,L]
      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME}\.php -f
      RewriteRule ^work/(.*)$ project-page.php?id=$1 [R=301,L]
      RewriteRule ^(.*)$ $1.php
    </IfModule>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多