【问题标题】:How to remove folder name from URL path without interfering links like the homepage?如何在不干扰主页等链接的情况下从 URL 路径中删除文件夹名称?
【发布时间】:2021-01-25 07:04:50
【问题描述】:

注意:该域不在线,它是在 localhost 中创建的

我现在在项目中面临的一个复杂问题是我想从 URL 中删除文件夹名称

http://www.example.com/pages/contact-us

http://www.example.com/contact-us

因此在这种情况下删除/pages/ -

这是我的文件结构-

现在要访问文件,我们必须先访问pages,然后是contact-us,所以要删除它,我在下面使用了这个.htaccess 代码-

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+pages/([^\s]+) [NC]
RewriteRule ^ %1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (?!^pages/)^(.*)$ /pages/$1 [L,NC]

当我使用它时,可以在不使用 /pages/ 的情况下访问 URL,但主页会显示

那么.htaccess 代码应该是什么才能在没有任何错误的情况下打开主页,还请说明这是否会扼杀我的 SEO 以及解决方法是什么?

请注意,如果我需要告诉您更多信息,在添加上述代码之前,我已将这些代码添加到 .htaccess 文件中,并且运行良好...

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html [NC,L]

Options -Indexes

php_value display_errors 1
AddHandler application/x-httpd-php .html .htm 

【问题讨论】:

  • 您希望/pages/ 提供什么文件?
  • @MrWhite 我希望 URL 为 hostedtools.com/contact-us from hostedtools.com/pages/contact-us,因为所有文件都在 pages 文件夹下
  • 是的,但是“主页”呢(导致 403)。您请求/,据说它被重写为/pages/ - 您希望从这里提供什么文件? index.php? index.html?还有什么?
  • @MrWhite 是的,这就是这段代码的问题,这段代码是否有任何改进来防止这种情况或新的替代品。
  • 但是您在请求主页时希望提供什么文件,这个请求是如何处理的?我认为“主页”是指http://example.com/? 形式的请求?如果您在/pages/ 目录中没有DirectoryIndex 文档,那么您确实会收到403 响应。我认为您必须有,但是您的问题尚不清楚,我们需要排除明显的问题。您在文档根目录中还有一个 index.html 文件,这似乎是多余的?

标签: html .htaccess server url-rewriting filepath


【解决方案1】:

如果所有页面(包括主页)都从/pages/ 子目录(这是您的代码当前假定的)提供服务会更简单。

(旁白:您实际上并没有在文件结构中包含/pages 子目录的内容,但是如果该子目录不包含目录索引文档,例如index.phpindex.html(取决于DirectoryIndex 指令的值),那么您确实会得到403 Forbidden 响应。与请求任何没有目录索引文档的目录相同。)

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (?!^pages/)^(.*)$ /pages/$1 [L,NC]

但是,如果您的主页应该从实际文档根目录提供,而不是重写到 /pages 子目录(与所有其他 URL 一样),那么您需要在上述规则块中包含一个例外。例如:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/$
RewriteRule (?!^pages/)^(.*)$ /pages/$1 [L,NC]

为了防止对/(文档根)的请求在内部被重写为/pages/

或者,对所有目录进行例外处理(文档根目录也是一个目录)。例如:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (?!^pages/)^(.*)$ /pages/$1 [L,NC]

或者,将您的主页 (index.html) 移动到 /pages 子目录。

【讨论】:

  • 感谢@MrWhite,当我将您的代码应用到 .htaccess(位于 pages 文件夹内)时效果非常好
  • 对不起,答案没有先奏效它再次奏效它没有
  • 找不到对象!在此服务器上找不到请求的 URL。引用页面上的链接似乎是错误的或过时的。请将该错误通知该页面的作者。如果您认为这是服务器错误,请联系网站管理员。错误 404
  • 您请求的 URL 是什么?您希望将请求重写到的底层文件系统路径是什么?
  • 我首先请求主页,然后当我请求主页/about-us.html 时,它说在example.com/about-us.html 错误404 中找不到对象我现在能做什么请告诉我无法弄清楚现在什么都没有
猜你喜欢
  • 2021-12-21
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 2019-07-18
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
相关资源
最近更新 更多