.htaccess 将带有查询字符串的URL重定向到新的“漂亮”URL,以避免重复内容

.htaccess 将带有查询字符串的URL重定向到新的“漂亮”URL,以避免重复内容,.htaccess,url,clean-urls,.htaccess,Url,Clean Urls,什么是最好的.htaccess重写代码来强制URL像这样 https://www.example.com/index.php?page=report/tinytoes_mothercare 对吗 https://www.example.com/report/tinytoes_mothercare 我的网站已经解析了https://www.example.com/report/tinytoes_mothercare,因此我希望避免使用上面丑陋和错误的URL复制任何内容。您可以在.htacces

什么是最好的.htaccess重写代码来强制URL像这样

https://www.example.com/index.php?page=report/tinytoes_mothercare
对吗

https://www.example.com/report/tinytoes_mothercare

我的网站已经解析了https://www.example.com/report/tinytoes_mothercare,因此我希望避免使用上面丑陋和错误的URL复制任何内容。

您可以在.htaccess文件顶部执行以下操作:,在解析pretty URL的现有重写之前,使用查询字符串将旧URL重定向到新的pretty URL

检查REDIRECT_STATUS环境变量的第一个条件确保我们不会通过重定向重写的URL得到重定向循环。REDIRECT_状态在初始请求时为空,因此仅重定向来自客户端的直接请求

第二个条件从查询字符串页面URL参数中获取必要的值。这与示例URL中的字符a-z、a-z、0-9、uu下划线、/slash和-hyphen-相匹配。如果需要匹配更多变体,则需要扩展角色类。然后使用%1反向引用在重写规则替换字符串中使用此值


请注意,这是一个302临时重定向。只有在确定301永久性文件正常工作时,才能更改为301永久性文件,以避免缓存问题。

在现有重写之前,您可以在.htaccess文件的顶部执行以下操作,以解析漂亮URL,将带有查询字符串的旧URL重定向到新的漂亮URL

检查REDIRECT_STATUS环境变量的第一个条件确保我们不会通过重定向重写的URL得到重定向循环。REDIRECT_状态在初始请求时为空,因此仅重定向来自客户端的直接请求

第二个条件从查询字符串页面URL参数中获取必要的值。这与示例URL中的字符a-z、a-z、0-9、uu下划线、/slash和-hyphen-相匹配。如果需要匹配更多变体,则需要扩展角色类。然后使用%1反向引用在重写规则替换字符串中使用此值


请注意,这是一个302临时重定向。只有在您确定301永久版本工作正常时,才能更改为301永久版本,以避免缓存问题。

谢谢,我会尽力让您知道!它不起作用。。我的实际htaccess从`Options All-index RewriteEngine On RewriteRule^sitemap.xml sitemap.php[QSA,L]RewriteCond%{REQUEST_FILENAME}开始-已重写COND%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}-l RewriteRule^.+$index.php?page=$1[QSA,l]`///////////////如果我在topo处向您添加此代码,我的错误url解析如下:请编辑您的问题以添加.htaccess文件的内容。啊,对不起,您需要RewriteRule上的QSD标志来从重定向请求中删除查询字符串。我已经删除了替换字符串中的附加/报告。我已经更新了我的答案。谢谢,我会尽力让你知道的!它不起作用。。我的实际htaccess从`Options All-index RewriteEngine On RewriteRule^sitemap.xml sitemap.php[QSA,L]RewriteCond%{REQUEST_FILENAME}开始-已重写COND%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}-l RewriteRule^.+$index.php?page=$1[QSA,l]`///////////////如果我在topo处向您添加此代码,我的错误url解析如下:请编辑您的问题以添加.htaccess文件的内容。啊,对不起,您需要RewriteRule上的QSD标志来从重定向请求中删除查询字符串。我已经删除了替换字符串中的附加/报告。我已经更新了我的答案。
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^page=([\w/-]*)
RewriteRule ^index\.php$ /%1 [QSD,R=302,L]