我有一些静态网站,我只想隐藏.html扩展名:
/foo获取静态文件/foo.html/foo然后客户端可以发送风格的书签mydomain.com/foo而不是mydomain.com/foo.html.
这听起来非常简单,mod_rewrite之前我曾经愉快地使用过(比如使用WordPress或重定向),但事实证明这更难破解.也许我错过了一些非常明显的东西,但我无法在任何地方找到解决方案而且我整天都在这里!
我们运行自己的服务器,所以这可以去哪里是最好的地方.
附录
下面检查的解决方案工作正常.然后在运行该网站一段时间后,我注意到两个问题:
所有页面都开始显得格格不入.我重新加载,清除缓存等,但仍然没有风格.我以前遇到过这个麻烦,找不到来源.
有一个目录和一个名为'gallery'的html文件,因此/ gallery链接显示了一个目录列表而不是html文件.我应该可以排序那个,但欢迎进一步提示:-)
大家好,我在我的网站上使用PHP,在我的系统上使用ubuntu linux.我在apache的error.log文件中得到了上述错误,即使在正确配置所有内容之后也是如此.我对此做了很多研究,但无法解决问题.有人可以帮我解决这个问题吗?以下是我的.htaccess文件abc directory.有人可以帮我这方面吗?
# -FrontPage-
IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*
<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
AuthName abc.org
AuthUserFile /home/abc/public_html/_vti_pvt/service.pwd
AuthGroupFile /home/abc/public_html/_vti_pvt/service.grp
Options -Indexes
RewriteEngine On
RewriteRule ^alumni$ alumni.php
RewriteRule ^student$ student.php
RewriteRule ^view_alumni_article/view/([0-9]+)$ view_alumni_article.php?op=view&article_id=$1
Run Code Online (Sandbox Code Playgroud) 我有一个问题,谷歌已经使用错误的网址索引了一些网页.
他们索引的网址是:
http://www.example.com/index.php/section1/section2
Run Code Online (Sandbox Code Playgroud)
我需要它重定向到:
http://www.example.com/section1/section2
Run Code Online (Sandbox Code Playgroud)
.htaccess不是我的强项,所以任何帮助都会非常感激.
提前致谢.
我想要一个mod_rewrite规则集,所以我可以引用一个没有.php扩展名的页面,但是要重写它以包含php扩展.这将在1&1服务器上运行.
有没有好的参考资料,所以我可以自己学习更多?
我有一台运行Apache的Linux主机和一台运行IIS的Windows主机.我有一个指向Linux主机的域,需要将其中继(代理)请求发送到IIS; 因此我在Apache中有以下虚拟主机定义(工作正常):
<VirtualHost 192.168.0.2:80>
ServerName www.acme.com
DocumentRoot /var/www/acme.com
RewriteEngine On
RewriteOptions Inherit
RewriteRule ^/(.*) http://win.acme.com/$1 [P]
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
现在我想添加SSL支持; 定义变为:
<VirtualHost 192.168.0.2:443>
ServerName www.acme.com
DocumentRoot /var/www/acme.com
GnuTLSEnable On
GnuTLSPriorities NORMAL:%COMPAT
GnuTLSCertificateFile /var/www/ssl/www.acme.com.crt
GnuTLSKeyFile /var/www/ssl/www.acme.com.key
RewriteEngine On
RewriteOptions Inherit
RewriteRule ^/(.*) https://win.acme.com/$1 [P]
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我在两个Web服务器上都有有效且可信的证书,如果我访问https://win.acme.com一切都很好,但是,当我访问时,https://www.acme.com我收到500内部服务器错误消息.查看错误日志显示:
[Wed Jul 20 08:35:34 2011] [错误] [客户端76.168.166.70] SSL代理请求www.wileybits.com:80但未启用[提示:SSLProxyEngine] [Wed Jul 20 08:35:34 2011] [error] proxy:HTTPS:无法为74.166.186.70:443启用ssl支持(win.acme.com)
请注意代理请求似乎是针对错误的域(wileybits)...它显示的域也由我的Apache服务器托管,但我不知道为什么它出现在acme.com的日志中(反向也许是DNS查找?)
无论如何,我错过了什么?
提前谢谢 - ekkis
ps主机名和地址已被修改,以保护无辜:)
*更新*
有:
RewriteRule ^/(.*) https://win.acme.com/$1 [R,L]
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常,但当然,Windows的主机名变得可见,这在我的场景中是不可接受的
我也试过(而不是mod_rewrite):
ProxyRequests Off
ProxyPass / …Run Code Online (Sandbox Code Playgroud) .htaccess我今天更新了 Apache(至 2.4.56-1) ,以前可以正常工作的大量重写现在出现了 AH10411 错误,与查询中的空格有关。我正在努力寻找“适当”的解决方案。
用户单击一个链接,例如<a href='FISH%20J12345.6-78919'>clickme</a>- 您可以看到链接 URL 中的空格已被编码为%20。
.htaccess相关服务器目录中的文件包含并执行以下相关指令:
RewriteRule ^(FISH\s*J[0-9\.]+-?\+?[0-9]+)$ myPage.php?sourceName=$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)
(在上面我检查的是空格,而不是%20,因为浏览器似乎在符合此规则之前将其转换为空格)。
在我更新 Apache 之前,这一直有效;现在用户收到 403 错误,我的 Apache 错误日志报告:
AH10411:重写的查询字符串包含控制字符或空格
这似乎是一个新错误,因为谷歌搜索什么也没找到!
编辑我的页面(例如)将空格更改为下划线并正确处理它并不是真正的选择,因为该设计旨在支持用户能够直接使用他们关心的对象的名称输入 URL。到目前为止,我发现的唯一解决方法有点难看,即在正则表达式中分别捕获源名称的两个部分,因此:
RewriteRule ^(FISH)\s*(J[0-9\.]+-?\+?[0-9]+)$ myPage.php?sourceName=$1+$2 [L,QSA]
^ ^ ^^^
Run Code Online (Sandbox Code Playgroud)
(我$1%20$2最后尝试了一下,也导致了同样的错误。)
对此有更好的解决方案吗?即,当 URL 位于我想要捕获并作为参数传递给底层页面的字符串中时,我“应该”如何处理 URL 中的空格情况?
我正在尝试使用Apache 2.2 VirtualHost声明中的mod_rewrite将所有请求重定向到我的域到另一个域.有一个例外 - 我希望/audio路径中的所有请求都不会被重定向.
我写了一个RewriteCond和RewriteRule来做到这一点,但它不太正确,我无法弄清楚为什么.正则表达式包含字符串"/ audio"的负前瞻,但由于某种原因,这不匹配.这是定义:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net(?!/audio) [NC]
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]
Run Code Online (Sandbox Code Playgroud)
如果我将RewriteCond更改为:
RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net/(?!audio) [NC]
Run Code Online (Sandbox Code Playgroud)
(即将正斜杠放在负前瞻部分之外)然后它可以正常工作,但这样做的缺点是不会重定向到没有尾部斜杠的mydomain.net请求.
谁能指出我做错了什么?
(注意:上面的RewriteRule位中的域周围的尖括号是由StackOverflow.com添加的 - 它们在实际代码中不存在!)
以下是规则:
<VirtualHost *:80>
ServerAdmin me@mydomain.net
DocumentRoot "/var/www/mydomain.net/htdocs"
ServerName www.mydomain.net
ServerAlias mydomain.net
RewriteEngine on
RewriteCond {REQUEST_URI} !^/audio
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]
RewriteLog logs/mod_rewrite_log
RewriteLogLevel 3
ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
谢谢@mercutio - 这很有道理,但它似乎仍然不起作用.
当我向http://mydomain.net/audio/something.mp3发出请求时,这是mod_rewrite日志所说的内容:
(2) init rewrite engine with requested uri /audio/something.mp3
(3) applying pattern '^(.*)$' to …Run Code Online (Sandbox Code Playgroud) 我一直在努力解决一些htaccess重定向问题.我只是花了一些时间在堆栈上阅读和搜索,并且无法获得适用于我的场景的anwser.
我正在将旧客户端网站的301重定向转换为新的客户端网站.旧页面有参数查询,我想从网址中删除.
/menu.php?idCategorie=29&idDetail=172
至
/new-website-page/
我有多个查询要做,这里有几个例子:
/menu.php?idCategorie=29&idDetail=172
/menu.php?idCategorie=29&idDetail=182
/menu.php?idCategorie=29&idDetail=184
/menu.php?idCategorie=29&idDetail=256
Run Code Online (Sandbox Code Playgroud)
所有这些都链接到不同的新页面.
这是我试过的:
RewriteCond %{QUERY_STRING} idDetail=172
RewriteRule ^menu.php(.*) /new-page/? [R=301,L]
Run Code Online (Sandbox Code Playgroud)
我被正确重定向,但URL保留查询字符串:
http://website.com/new-page/?idCategorie=29&idDetail=172
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
RewriteRule ^menu.php?idCategorie=29&idDetail=172$ http://website.com/new-page/? [L,R=301]
Run Code Online (Sandbox Code Playgroud)
还有这个:
RewriteCond %{QUERY_STRING} idDetail=172(.*)$
RewriteRule ^menu.php /new-page-name?$1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)
并且它不起作用(最后仍然有查询字符串)
谢谢!
我在我的Ubuntu服务器上安装了Apache.出于特殊原因,我必须在其上启用mod_rewrite.所以我做到了这一点.
在互联网上的每个教程中,最后一个命令是重启apache.但当我这样做时,控制台打印[fail].
有人能帮我一下吗?
$ service apache2 restart
* Restarting web server apache2 [fail]
Run Code Online (Sandbox Code Playgroud) 我一直在努力解决一个需要重写一个URL添加路径的访问规则.
RewriteRule ^(configuration/.+)$ application-server/$1 [L,NC,R=301,NE]
Run Code Online (Sandbox Code Playgroud)
此规则仅在我的Joomla站点上导致空白页面,没有错误日志或消息.奇怪的是,我完成了所有其他规则:
RewriteRule ^(log/.+)$ application-server/$1 [L,NC,R=301,NE]
RewriteRule ^(monitor/.+)$ application-server/$1 [L,NC,R=301,NE]
Run Code Online (Sandbox Code Playgroud)
最后,我在论坛中发现了使用以下选项的建议:
Options -Multiviews
Run Code Online (Sandbox Code Playgroud)
这实际上解决了这个问题,但是我想知道在使用这个选项时是否会对其他规则产生任何副作用.
mod-rewrite ×10
apache ×8
.htaccess ×5
apache2 ×1
friendly-url ×1
mod-proxy ×1
php ×1
regex ×1
virtualhost ×1