有没有类似通配符指令来捕获所有可能的错误并在单个自定义错误页面中处理它们?
ErrorDocument 404 /error.php?code=404
ErrorDocument 403 /error.php?code=403
...
ErrorDocument NNN /error.php?code=NNN #possible use of RegExp?
Run Code Online (Sandbox Code Playgroud)
我知道我可能不会在这里处理很多自定义错误页面,但我对此很好奇.
我将.htaccess上传到服务器并收到错误500(内部服务器错误).
并在错误日志中我有以下错误:
... /.htaccess:此处不允许使用RewriteEngine
但是mod_rewrite.so启用了.
那么,我需要改变吗?
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
Run Code Online (Sandbox Code Playgroud)
至
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
Run Code Online (Sandbox Code Playgroud)
在/etc/httpd/conf/httpd.conf文件中?
或者它可能是别的吗?.htaccess文件应该没问题,因为它在我的localhost上运行得很好.我只是不想搞砸任何东西.
这是我的.htaccess文件的一部分:
Options All -Indexes
Options +FollowSymLinks
RewriteEngine On
Run Code Online (Sandbox Code Playgroud) 我需要设置一些RewriteRules来重定向一个有空格的URL.我试过这个:
RewriteRule ^article/with%20spaces.html$ /article/without_spaces.html [R=301,L]
Run Code Online (Sandbox Code Playgroud)
......但它不起作用.放入空格而不是%20会导致500内部服务器错误.如何添加空间?
我在网上搜索了2天,我尝试在我当地的wamp中使用htaccess,但我不能!我知道有什么不对,但我不知道在哪里......
首先:我在apache菜单中激活了" rewrite_module ",然后检查了phpinfo页面,我看到该模块已添加到其" Loaded Modules "部分.
第二:我检查了httpd.conf并进行了一些更改,这是结果(只是重要的部分):
ServerRoot "c:/program Files/wamp/bin/apache/apache2.2.11"
Listen 80
ServerName localhost:80
DocumentRoot "c:/program Files/wamp/www/"
<Directory />
Options FollowSymLinks
# AllowOverride None
# Order deny,allow
# Deny from all
AllowOverride all
Order Allow,Deny
Allow from all
</Directory>
<Directory "c:/program Files/wamp/www/">
Options Indexes FollowSymLinks
AllowOverride all
Order Allow,Deny
Allow from all
</Directory>
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
Run Code Online (Sandbox Code Playgroud)
下一篇:我为我的工作区创建了一个别名.这是.conf文件的内容:
Alias /basic_test/ "e:/Projects/basic_test/"
<Directory "e:/Projects/basic_test/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
Allow from all …Run Code Online (Sandbox Code Playgroud) 我有一个PHP项目,我需要在URL的路径中发送一个哈希字符(#).(http://www.example.com/parameter#23/parameter#67/index.php)我认为urlencode允许这样做,将哈希值转换为%23
但是现在我看到,即使是urlencoded哈希也会强制浏览器将所有内容都视为URL片段(或查询).
有没有办法传递哈希值,还是我需要在urlencode之前进行字符替换?
编辑添加(2017年9月19日):
原来我问的是错误的问题.我的问题不是在路径中使用哈希字符(编码它确实有效),而是使用mod_rewrite将其转换为查询字符串.我没能在RewriteRule中重新编码它.我将编辑标题以匹配.
这是我使用的重写规则:
RewriteEngine On
# convert path strings into query strings
RewriteRule "^(.*)/(.*)/hashtags.php" /hashtags.php?parameter_1=$1&parameter_2=$2 [QSA,L]
Run Code Online (Sandbox Code Playgroud)
一旦我添加了B标签,它就能正常工作:
RewriteEngine On
# convert path strings into query strings
RewriteRule "^(.*)/(.*)/hashtags.php" /hashtags.php?parameter_1=$1&parameter_2=$2 [QSA,L,B]
Run Code Online (Sandbox Code Playgroud) 我在htaccess这些类型的规则中多次看到过:
RewriteCond %{HTTP_REFERER} !^http://www.domain.it$ [NC]
Run Code Online (Sandbox Code Playgroud)
要么
RewriteCond %{HTTP_HOST} !^www\.domain\.it$ [NC]
Run Code Online (Sandbox Code Playgroud)
NC当仅检查域部分时,为什么标记是必需的?
我注意到浏览器总是将域名中的大写字母转换成小写字母,所以[NC]在这种情况下我看不出该标志是什么值得使用的.
我的意思是,如果我们检查网址的剩余部分,我理解[NC]在Unix系统上标记原因的需要www.domain.com/index.html是不同的文件,www.domain.com/INDEX.HTML但是NC当我们只检查RewriteRule中的域部分时,我不理解标记的需要.
由于您花时间阅读上述内容,我还要问一个与NC旗帜没有直接关系但与之相关的小问题RewriteCond
RewriteCond上面显示的两个都运行良好,我认为只有点之前的斜线才能工作(!^www\.domain\.it$)因为没有斜线的点应该表示正则表达式中的"任何字符",而\.意思是点字符,但是另外一个表示效果很好,但是你知道为什么?
%1和$1.htaccess有什么区别?
例如,
# to remove www
RewriteCond %{HTTP_HOST} ^(\w+)\.mydomain\.com [NC]
RewriteRule .* http://mydomain.com/%1 [R=301,L]
# versus
# RewriteRule .* http://mydomain.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
我一直在使用Dave Child的.htaccess备忘单和Jackol的.htaccess备忘单以及Apache mod_rewrite docs但是额外的帮助会很棒.
我在htaccess中有以下内容强制在URL中使用www:
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
如果不在localhost上,我该如何应用它?我可以提出某种条件吗?现在,我得到这样的东西:http://www.localhost/......
有没有办法使用mod_rewrite为许多URL 主动提供Apache的默认内置404页面?不是自定义错误文档,而是像
RewriteCond %{REQUEST_URI} ^/dirname/pagename
RewriteRule -- serve 404 page -----
Run Code Online (Sandbox Code Playgroud)
我知道如何构建一个发送404标头的PHP页面,并mod_rewrite重定向所有的URL,但我更喜欢mod_rewrite仅基于的解决方案.
我刚想到了重定向到一个不存在的地址:
RewriteCond %{REQUEST_URI} ^/dirname/pagename
RewriteRule .* /sflkadsölfkasdfölkasdflökasdf
Run Code Online (Sandbox Code Playgroud)
但这会在错误页面上给用户提供"/sflkadsölfkasdfölkasdflökasdf不存在"的消息,这看起来有点不专业.
在我的.htaccess文件中使用这个RewriteRule我得到RewriteRule:Bad flag delimiters,它在浏览器中返回500错误.任何人都可以指出我正确的方向.谢谢.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^dev/(.*)$ http://dev.example.com/$1 [L,R=301, NC]
Run Code Online (Sandbox Code Playgroud)
这是在数字海洋Droplet上的Ubuntu上.
mod-rewrite ×10
apache ×8
.htaccess ×6
hash ×1
httpd.conf ×1
php ×1
regex ×1
ubuntu ×1
url ×1
urlencode ×1
wampserver ×1