1

我正在尝试在 CloudWays 服务器中创建一个对 SEO 友好的 URL,但它不起作用。此外,当我在 localhost 或 Cpanel 中尝试它时,它工作正常。

谢谢!

这是我的 .htaccess 文件代码:-

Options +MultiViews
RewriteEngine On

# Set the default handler
DirectoryIndex index.php index.html index.htm

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

RewriteRule ^validate/([a-zA-Z0-9-/]+)$ search.php?phoneNumber=$1
RewriteRule ^validate/([a-zA-Z-0-9-]+)/ search.php?phoneNumber=$1

这是主要链接:-

https://example.com/search.php?phoneNumber=16503858068

我想要这样的:-

https://example.com/validate/16503858068
4

2 回答 2

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

RewriteRule ^validate/([a-zA-Z0-9-/]+)$ search.php?phoneNumber=$1
RewriteRule ^validate/([a-zA-Z-0-9-]+)/ search.php?phoneNumber=$1

你的规则顺序不对。最后两个规则(可以合并为一个)永远不会被处理,因为表单的 URL是由前面的规则/validate/16503858068路由到的。/index.php

试试这样:

# Disable MutliViews
Options -MultiViews

RewriteEngine On

# Set the default handler
DirectoryIndex index.php index.html index.htm

RewriteRule ^validate/([a-zA-Z0-9-]+)/?$ search.php?phoneNumber=$1 [L]

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

注意L第一条规则上的标志。

此外,您可能应该禁用 MultiViews。出于某种原因,您明确启用了此功能?

于 2021-11-02T16:44:28.120 回答
0

RewriteRule (.*) /index.php/$1 [L]

L选项表示如果匹配,解析器将在此重定向规则处停止。因为(.*)将匹配应用规则的所有内容,并且永远不会应用以下规则。

要解决此问题,您可以在此规则之前添加您自己的规则,但请确保同时使用该L标志,否则该(.*)规则将再次覆盖它。

这也在这里得到了回答: 多个重写器

于 2021-11-02T14:53:42.020 回答