Htaccess 规则修改URL路径

Htaccess 规则修改URL路径

我的一个客户有一个网站,用作示例.com。他希望它成为example.com/pl,为未来的英文网站版本保存根路径。

我想知道使用 .htaccess 规则是否可行。当前的 .htaccess 如下:

RewriteEngine On

RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

是否可以更改规则以实现客户期望?如果可以,如何更改?

答案1

像这样更改 URL 结构不是您应该独自完成的事情.htaccess。首先,您仍然需要更改应用程序中的 URL 结构。所有内部链接(href属性)都需要更改为新的 URL 结构。即,您之前在 HTML 中为“ ” 的位置/path/to/page现在需要更改为“ /pl/path/to/page”。

所以,

  1. 更改应用程序中的 URL 结构。

由于您已经有一个前端控制器(即,index.php路由请求所经过的所有内容),因此您实际上不需要在 中进行任何更改.htaccess。但是,您的前端控制器(index.php等)需要进行修改以处理新的 URL 格式。

  1. 更新你的前端控制器。

一旦您的应用程序能够顺利地适应新的 URL 结构,您就可以在 中实现外部重定向.htaccess以重定向/path/to/page/pl/path/to/page。这有利于搜索引擎和任何链接到旧 URL 的入站链接/书签。

  1. 将所有请求重定向到新的 URL 格式。

例如,在您现有的内部重写(前端控制器)之前和规范的 www 到非 www 重定向之后,您可以执行以下操作:

RewriteCond %{REQUEST_URI} /(.*)
RewriteRule !^pl/ /pl/%1 [R=301,L]

如果请求的 URL 不以 开头,/pl/则将其添加到 URL 的前缀并重定向。

保存未来网站英文版本的根路径。

这可能是一个潜在的问题,因为您必须/pl/...在此期间将所有根请求重定向到,并且一些/许多现有的入站链接可能不会更新。当您在根目录中实现英语版本时,您需要禁用重定向,或者智能地仅重定向所需的 URL。或者,使用前缀实现英语版本/en/

相关内容