美好的一天,我希望我的网站将 URL 中的尾随查询定向到简单的“/”。
例如:“https://www.website.com/page?url_query=my-article”为“https://www.website.com/page/my-article”,将“?url_query=”替换为“ /”
如果我明显忽略了一些显而易见的事情,我深表歉意。我已经阅读了多篇关于这个主题的 StackOverflow 文章,所有文章的答案相似但略有不同。似乎没有一个在我的 .htaccess 文件中工作。我的文件中是否有某些内容与此代码重叠/冲突?
上面的链接是一个示例,在我的确切 URL 中,我已将“?url_query=”最小化为“?l=”,这样当尾随查询存在时,它至少会尽可能小。
这是我正在使用的确切页面*:
https://localhost/clarity/i?l=my-event
https://localhost/clarity/library/event?l=my-event
https://localhost/clarity/library/article?l=my-article
*这些实际上位于“/htdocs/clarity/public/page.php”中,而不是“/htdocs/clarity/page.php”中。.htaccess:
# Disable directory browsing
Options -Indexes
# Rewrite URLs
RewriteEngine On
RewriteBase /clarity/
# Redirect to https and www
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^clarity\.rf\.gd [NC]
RewriteRule ^(.*)$ https://www.clarity.rf.gd/$1 [L,R=301]
# Redirect to public folder
RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=301]
RewriteRule ^((?!public/).*)$ public/$1 [L,NC]
# Replace "?l=" to "/"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?test/(.*?)/?$ /test.php?l=$1 [L]
# Redirect from "?l=" to "/"
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /test\.php\?l=([^\&\ ]+)
RewriteRule ^/?test\.php$ /test/%1? [L,R=301]
# Remove .html
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
# Remove .php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
最后澄清,我的 .htaccess 文件中的其他所有内容都按预期工作。 “https”和“www”重定向以及删除“.html”、“.php”扩展名。~谢谢您的宝贵时间
RewriteCond %{QUERY_STRING} ^url_query=我的文章$ 重写规则 ^page$
https://www.website.com/page/my-article? [R=301,L]
或者自动化RewriteCond %{QUERY_STRING} url_query=(.
) RewriteRule ^(.)/url_query=$ $1?page=%{QUERY_STRING} [R=301,L]
R=301 :重定向类型永久意味着在 SEO 和所有内容之后您将“也许”删除旧网址。无论如何,好的网址是这个......祝你有美好的一天...