Articles of mod rewrite

从url中删除?= collcc

Google网站pipe理员工具已通知我有太多重复的url。 有些参数已添加,我不知道,我需要删除它,例如: http://example.com/5454/my-utr.html http://example.com/5454/my_url.html?collcc=3067605522& 这在Google上被标记为重复的url。 我怎样才能阻止?=collcc或使用.htaccess删除它。 或者最好删除只是?collcc=和redirect到正常的URL与.htaccess ? 我知道我可以阻止在robots.txt文件,但我需要干净的url,仍然在谷歌索引,所以我需要删除只是查询collcc 。 我努力了: RewriteCond %{QUERY_STRING} collcc= RewriteRule (.*) http://my-site.com/$1? [R=301,L]

带有多个QUERY STRINGS的mod_rewrite

这是我的问题https://serverfault.com/a/761474/77231的扩展 我正在尝试向URL添加一个额外的QUERY STRING参数,并将空格更改为下划线,但没有成功。 而不是简单地改变: http://somedomainname.com/grafana/dashboard/db/generic-ping?var-device=SF-some.machinename.com 至: http://somedomainname.com/grafana/dashboard/db/generic-ping?var-device=SF-some_machinename_com 我试图改变一个额外的参数,如: http://somedomainname.com/grafana/dashboard/db/generic-check?var-device=SF-some.machinename.com&var-check=Check CPU Load 至: http://somedomainname.com/grafana/dashboard/db/generic-check?var-device=SF-some_machinename_com&var-check=Check_CPU_Load 在我以前回答的问题中使用相同的逻辑,我能够得到第一部分工作使用: RewriteCond %{QUERY_STRING} (.*)\.(.*)\.(.*) RewriteRule ^/grafana/dashboard/db/generic-check /grafana/dashboard/db/generic-check?%1_%2_%3 [R=301] 但是,这显然只是让我的第一部分,并出现如下: http://somedomainname.com/grafana/dashboard/db/generic-check?var-device=SF-some_computername_com&var-check=Check%2520CPU%2520Load 我已经添加了一个额外的QUERY_STRING和重写规则,如: RewriteCond %{QUERY_STRING} ^&var-check=(.*)\ (.*)\ (.*) RewriteRule ^&var-check var-check=%1_%2_%3 [R=301] …没有成功。 我也试过把两者结合起来: RewriteCond %{QUERY_STRING} (.*)\.(.*)\.(.*)&(.*)\ (.*)\ (.*) RewriteRule ^/grafana/dashboard/db/generic-check /grafana/dashboard/db/generic-check?%1_%2_%3&%4_%5_%6 [R=301] ..也没有成功,以及使用%20 \s和%2520而不是\和一个空格…以及像\ |\s|%20|%2520这样的pipe道分隔符。 理想情况下,我希望在一次重写中完成这项工作,但是我很乐意让它工作。 任何帮助表示赞赏。

htaccess:只删除特定文件或文件夹的PHP扩展

我目前在/public_html/.htaccess中使用以下去除.php扩展名和强制结尾斜线。 # Remove .php extension RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php RewriteRule (.*)\.php$ /$1/ [L,R=301] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^/(.+)/$ RewriteCond %{DOCUMENT_ROOT}/%1.php -f RewriteRule ^(.*)/$ $1.php [L] # Force trailing slash RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule .*[^/]$ $0/ [L,R=301] 这完美的工作,但是,/ public_html的子文件夹中有一些PHP文件,我们不希望被重写。 如何修改重写+结尾斜杠以仅应用于/ public_html文件夹中的PHP文件,或者指定该规则适用的PHP文件列表? 更新:在我的情况下,我相信最好的解决scheme将剥离PHP扩展(并添加尾部斜杠)只显式指定的文件,而不是创build基于文件夹的条件。 更新2:工作解决scheme: #Remove PHP extension from named files RewriteCond %{REQUEST_FILENAME} !-d […]

尽pipe有重写规则,Apache还是会添加尾随斜线

我正在使用一个简单的.htaccess来处理一切与PHP脚本: RewriteEngine on RewriteRule . index.php 我的index.php只是回应服务器variables(使用print_r($_SERVER) ); 一切工作正常,我在URL中input任何东西,并显示index.php内容。 但是,考虑到这种结构: test/ # document root folder/ # empty folder index.php .htaccess 我注意到访问[site]/folder首先将浏览器redirect到[site]/folder/ ,然后显示正确的index.php内容。 为什么发生这种情况? 是不是重写规则应该redirect一切“原样”? 这与虚拟主机一起使用,以在本地testing网站。 configuration与最低限度。 在我的.htaccess之前是否可以加载其他的apache文件? <VirtualHost *:80> ServerName test.local DocumentRoot /Library/WebServer/Documents/test/ </VirtualHost> 目前使用OS X 10.10。

无法加载mod_rewrite Apache模块

我正在尝试使用Apache24 server mod_rewrite模块,但我无法加载它。 我知道有很多关于这个话题的问题,我经历了所有这些,但似乎没有任何工作。 这些是我一直沿用的步骤— CHANGED httpd.conf文件进行了这些更改: 一个。 LoadModule rewrite_module modules/mod_rewrite.so 湾 将AllowOverride None更改为AllowOverride All 重新启动Apache服务器 使用命令提示符命令httpd -M检查加载的模块。 我可以看到那里的mod_rewrite模块已经加载。 我附上下面的图片。 但执行所有这些步骤后,我看不到mod_rewrite作为加载模块在phpinfo 。 如上图所示,没有装载mod_rewrite模块。 另外作为一个狂野的黑客,我甚至尝试使用.htaccess文件重写url,但这是行不通的。 Apache似乎忽略了.htaccess文件,尽pipe我把这个文件放在我的根目录下。 Note: I am running `PHP` as an apache module Using `WAMP` stack Using `localhost` as server 我需要这个模块严重的URL重写的目的。 你们可以build议一些其他的方式来加载这个模块? 编辑 我试图从虚拟主机重写URL,因为答案表明模块已加载,它不依赖于.htaccess和info.php 。但stil不是redirect。 我在下面添加Virtual host设置— <VirtualHost *:80> <Directory "/Apache24/htdocs"> Options FollowSymLinks AllowOverride […]

.htaccess删除php文件扩展名不工作只在heroku上

所以我在我的本地apache XAMPP服务器在根目录中的.htaccess文件中的下面的代码,它正常工作100%。 但是,当我尝试部署到Heroku时,它不起作用。 我已经尝试了在互联网上发现稍微修改版本执行相同的事情,但没有一个似乎工作。 这应该是删除.php文件的扩展名,并允许像/api/products/all文件api.php存在和products/all只读入PHP $_SERVER['PATH_INFO']和输出是基于它们是什么。 Options +MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] 我不知道有关.htaccess吨,所以任何帮助,将不胜感激。

将资产请求redirect到https以及mod_rewrite,以获取相应的URL

我无法将所有请求更改为https,而将以下内容用于相当的URL: RewriteEngine On RewriteBase / RewriteRule ^/?([-_a-zA-Z0-9]+)$ /?p=$1 RewriteRule ^/?([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)$ /?par=$1&p=$2 [L] 我已经尝试在上面直接添加以下内容(并删除上面的L指令),但得到redirect错误: RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 我在这里做错了什么?

Apache 2.4.27 mod_rewrite到cgi-bin失败

Oracle Linux 7 x64上的Apache 2.4.27。 我可以正确调用https://example.com/cgi-bin/helloworld.cgi 。 简单的Perl脚本返回“Hello,world via cgi-bin!” 我可以在https://example.com/helloworld.html正确调用静态内容 简单的HTML文件返回“Hello,world via html!” 我可以使用RewriteRule : RewriteRule "^/test" "/helloworld.html" 我看到“Hello,world via html!” 但是,我不能使用RewriteRule: RewriteRule "^/test" "/cgi-bin/helloworld.cgi" 这会导致400错误的请求。 那我怎么直接打电话呢? 如何在进入/cgi-bin时使我的RewriteRule工作? 这似乎是我的问题。 我尝试添加[L]和[L,PT]但没有任何帮助。

在生产服务器上更新Apache conf的正确步骤?

我通常: 更新我的本地near-replica(ServerName指令和日志显然是不同的)生产conf文件,并作出改变,如重写规则的东西。 /etc/init.d/apache2重新启动或本地优雅,并确保它的工作 将conf文件scp到生产服务器 apache2ctl configtest apache2ctl优雅 我从来没有真正遵循任何指导,只是拿起一些命令。 这通常是这样做的方式? 我几乎总是在生产服务器上使用优雅的,因为我不想丢失客户端完全重新启动 – 优雅的重新启动是相当普遍的,对吧? 在任何情况下,优雅是不够的,我需要做一个完整的重新启动?

mod_rewrite和转义查询string中的/(%2f)

我想redirect下面的url oldsite.com/index.htm?Page?somepath%2fsomefile 至 newsite.com/productindex.htm?p=somepath%2fsomefile 我有以下规则 RewriteCond %{QUERY_STRING} ^Page=(.*)$ RewriteRule ^index.htm$ http://newsite.com?p=%1 [R=301,NC,L] 但它redirect到 newsite.com/productindex.htm?p=somepath%252Fsomefile >————————————–^^^^^ 有很多关于一个长期存在的双转义错误的引用,最近已经修复了( 2.2.12我认为 ),并且正在运行2.2.9我认为RewriteRule B标志可能会有所帮助,但这会使情况变得更糟… newsite.com/productindex.htm?p=somepath%25252Fsomefile >————————————–^^^^^^^ 来自Apache大师的任何想法?