htaccess链接中的查询字符串未在PC上打开,

时间:2019-03-13 19:14:48

标签: .htaccess

我的htaccess文件如下:

DirectoryIndex index.php
RewriteEngine On
RewriteBase /
RewriteRule ^sitemap.php$ sitemap.xml [L]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|robots\.txt)
RewriteRule ^(.*)$ /index.php?/$1 [L]

我希望我的链接看起来像: https://kaznews.kz/news/477800

但是当我有“ QUERY STRING”时,他们不会打开以下链接:https://kaznews.kz/news/477800?google

我想要删除?mark和查询,或者在末尾添加它们,但显示正确的页面。

RewriteRule ^(.*)$ /index.php?/$1 [r=301,L,QSA]

这不适合我,因为它给了我 这样的结果:https://kaznews.kz/index.php?/news/477800&google内含index.php,但随后会有重复的链接。

1 个答案:

答案 0 :(得分:0)

好吧,看起来大致就是您要寻找的东西:

RewriteRule ^/?news/(\d+)/(.+)$ /news/$1?$2 [END,QSD]

该规则将在内部将对/news/477800/google的请求重写为/news/477800?google

更新:

从下面的评论中我们了解到,您实际上要问的是如何删除,因此请忽略请求中指定的所有查询参数。尽管这是一个有问题的事情(如评论中所述),但这是实现该目的的规则:

RewriteRule ^/?news/(\d+)$ /news/$1 [END,QSD]

常规:

如果使用上述规则收到内部服务器错误(http状态500),则很可能是您运行了非常旧版本的apache http服务器。在这种情况下,您将在http服务器错误日志文件中看到对不支持的[END]标志的明确提示。您可以尝试升级或使用旧的[L]标志,在这种情况下它可能会起作用,尽管这在一定程度上取决于您的设置。

此规则将同样在HTTP服务器主机配置或动态配置文件内(“htaccess的”文件)工作。显然,重写模块需要加载到http服务器内部并在http主机中启用。如果使用动态配置文件,则需要注意在主机配置中完全启用了它的解释,并且该解释位于主机的DOCUMENT_ROOT文件夹中。

还有一个一般性说明:您应该始终喜欢将此类规则放置在http服务器主机配置中,而不要使用动态配置文件(“ .htaccess”)。这些动态配置文件增加了复杂性,通常是导致意外行为,难以调试的原因,并且确实降低了http服务器的速度。仅当您无法访问真正的http服务器主机配置(阅读:真正便宜的服务提供商)或坚持编写自己的规则的应用程序(这显然是安全的噩梦)时,才提供它们作为最后的选择。