htaccess 重写规则 seo 友好不起作用

htaccess rewrite rule seo friendly not working

我想改变这个URL:

example.com/services-details.php?service_id=1

收件人:

example.com/services-details/1

这是 .htaccess 文件的代码

Options +FollowSymLinks -MultiViews
RewriteEngine On

#SEO FRIENDLY URL

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)$ services-details.php?service_id=

更新(固定)

第 1 步: 将此代码添加到您的 .htaccess 文件

Options +FollowSymLinks -MultiViews
RewriteEngine On

# SEO FRIENDLY URL

# Redirect "/services-details.php?service_id=<num>" to "/services-details/<num>"
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^service_id=(\d+)$
RewriteRule ^(services-details)\.php$ //%1 [QSD,R=301,L]

# Rewrite "/services-details/<num>" back to "services-details.php?service_id=<num>"
RewriteRule ^(services-details)/(\d+)$ .php?service_id= [L]

第 2 步: 在`HTML 元素

中添加此代码(在顶部)
<base href="/">

执行完以下步骤后,它应该可以工作了。

信息

不要忘记更改 link 名称 services-details

RewriteRule ^([a-zA-Z0-9_-]+)$ services-details.php?service_id=

RewriteRule模式(即^([a-zA-Z0-9_-]+)$)仅匹配一个path-segment,而请求的URL有两个,即。 /services-details/1 - 你需要匹配 service-details.

我假设 service_id 始终是数字。

例如:

Options +FollowSymLinks -MultiViews
RewriteEngine On

# SEO FRIENDLY URL

RewriteRule ^(services-details)/(\d+)$ .php?service_id= [L]

既然要重写,不妨抓取service-details避免重复。

似乎不​​需要文件系统检查,因为我不认为 /services-details/<number> 匹配文件或目录?


请注意,如果您要更改现有的URL结构,其中旧的URL已被搜索引擎编入索引或被第三方链接到那么您还应该实施从旧 URL(即 /services-details.php?service_id=<number>)到新 URL(即 /services-details/<number>)的 301 重定向,以保持 SEO。

例如,以下“重定向”需要现有的“重写”(以上)之前:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^service_id=(\d+)$
RewriteRule ^(services-details)\.php$ //%1 [QSD,R=301,L]

需要 QSD 标志才能从重定向响应中删除原始查询字符串。

总结

您的 .htaccess 文件应如下所示,并结合了以下规则:

Options +FollowSymLinks -MultiViews
RewriteEngine On

# SEO FRIENDLY URL

# Redirect "/services-details.php?service_id=<num>" to "/services-details/<num>"
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^service_id=(\d+)$
RewriteRule ^(services-details)\.php$ //%1 [QSD,R=301,L]

# Rewrite "/services-details/<num>" back to "services-details.php?service_id=<num>"
RewriteRule ^(services-details)/(\d+)$ .php?service_id= [L]