我正在使用运行Apache 2 HTTPD的Ubuntu服务器和使用Railo 3.1.2的Tomcat 6设置Mango Blog实例。在我开始尝试为博客URL实现URL重写之前,我能够完成所有设置。
我使用了Adam Tuttle's和John Sieber's帖子的组合来获取重写规则。我的网站设置如下:
{}根目录/。htaccess的
RewriteEngine on
RewriteBase /
# archives rule must be located before page rule for paging to work correctly
RewriteRule archives/(.*)$ archives.cfm/$1 [PT,L,NC]
RewriteRule page/(.*)$ page.cfm/$1 [PT,L,NC]
RewriteRule post/(.*)$ post.cfm/$1 [PT,L,NC]
RewriteRule author/(.*)$ author.cfm/$1 [PT,L,NC]
{apache的家庭} /网站启用/网站名称
<VirtualHost *:80>
ServerAdmin *******
DocumentRoot /var/www/******/www
ServerName mango.*****.com
DirectoryIndex index.cfm
<Directory /var/www/*******.com/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error-*******_com.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access-********_com.log combined
ProxyPreserveHost Off
ProxyPassMatch ^/(.+\.cf[cm])(/.*)?$ ajp://********.com:8009/
</VirtualHost>
当我在网站上访问/ post / hello-world访问博客文章时,我收到404错误。如果我去/post.cfm/hello-world这个帖子就好了。我尝试了对rewrite tester的重写规则,并说重写应该可以正常工作。我很难重写,所以如果这很简单,我会道歉。
答案 0 :(得分:2)
输入您的.htaccess文件:
Options -Multiviews
答案 1 :(得分:0)
尝试将重写规则移至VirtualHost块。我有一些奇怪的问题.htaccess无法正常工作/重写。
我可能在这里错了,但这就是我认为发生的事情。
Apache会查找/ post /,它不存在并返回404.如果它存在于/ post /中,它会运行.htaccess,但它不会。
如果重写规则位于httpd.conf文件中VirtualHost块内的目录块中,则Apache知道重定向而不是查找/ post /。
<VirtualHost *:80>
ServerAdmin *******
DocumentRoot /var/www/******/www
ServerName mango.*****.com
DirectoryIndex index.cfm
<Directory /var/www/*******.com/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
RewriteEngine on
RewriteBase /
# archives rule must be located before page rule for paging to work correctly
RewriteRule archives/(.*)$ archives.cfm/$1 [PT,L,NC]
RewriteRule page/(.*)$ page.cfm/$1 [PT,L,NC]
RewriteRule post/(.*)$ post.cfm/$1 [PT,L,NC]
RewriteRule author/(.*)$ author.cfm/$1 [PT,L,NC]
</Directory>
ErrorLog /var/log/apache2/error-*******_com.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access-********_com.log combined
ProxyPreserveHost Off
ProxyPassMatch ^/(.+\.cf[cm])(/.*)?$ ajp://********.com:8009/
答案 2 :(得分:0)
您的问题可能与您的RewriteBase有关。当我将你的例子加载到测试服务器上时,我在Apache的错误日志中看到,由于我所使用的环境,使用RewriteBase对我有用;但是,在您的情况下使用/可能无法创建正确的路径。
在您的Web服务器错误日志中,查看当它无法找到404错误时生成的路径。可能,它会说:
[21/May/2011:17:29:20 +0000] [error] [client #.#.#.#] File does not exist: /path/to/something/not/quite/right/post.cfm/hello_world
按照路径确保它实际上引导您到* .cfm文件所在的实际服务器位置。然后只需修改RewriteBase即可使其成为正确的路径。
希望有所帮助。