我有这个URL:
https://www.example.it/page.php?user=Pippo
我应该得到的结果是:
https://www.example.it/Pippo
我尝试使用以下代码:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^page/(.*)/$ /page.php?user=$1 [L]
但是URL的一部分仍然存在,如果我返回到另一个页面,只要服务器崩溃,我就会一直被重定向到同一个页面。
发布于 2018-08-31 06:42:32
如果要将/page.php?user=<username>
重定向到/<username>
,其中<username>
是一系列a-z或A-Z字符,请在.htaccess
文件的顶部尝试类似以下内容:
Options -MultiViews
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^user=([a-zA-Z]+)
RewriteRule ^page\.php$ /%1? [R=302,L]
只是为了澄清,这只是为了满足那些可能已经索引了旧URL的搜索引擎,或者外部网站已经链接到它的地方。应用程序中的URL已经直接链接到/<username>
。
%1
是对最后一个匹配的CondPattern中捕获的组的反向引用。对REDIRECT_STATUS
环境变量的检查是为了确保我们只检查初始请求,而不是重写的请求。
只有在你测试过它工作正常的情况下,才能切换到301。
然后,您可以遵循现有规则,在内部将请求重写回/page.php?user=<username>
。尽管您的指令中的NC
标志是不必要的。就像对现有文件(可能还有目录?)的检查一样,除非您有没有扩展名的文件?并且您不需要转义字符类中的点。因此,它可以简化为:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)$ /page.php?user=$1 [L]
https://stackoverflow.com/questions/52105494
复制相似问题