modRewrite

时间:2016-06-25 13:35:19

标签: php apache .htaccess mod-rewrite url-rewriting

我有一个.htaccess文件必须重写SEO友好网站的URL,

所以当我点击例如。一篇文章(例如www.example.com/article/this-is-an-artcle/)必须将我重定向到index.php?article = this-is-an-article。

我必须对类别页面和管理页面做同样的事情,所以完整性就是这样的

www.ex.com/index.php?article=example-article -> www.ex.com/article/example-article   
www.ex.com/index.php?category=example -> www.ex.com/category/example
www.ex.com/index.php?page=admin -> www.ex.com/adm

除此之外,我必须从URL隐藏index.php文件。

我这样做,但产生 404错误

Options +FollowSymLinks

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} . [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^article/([\w-]+)/?$ index.php?article=$1 [QSA,L,NC]

RewriteRule ^category/([\w-]+)/?$ index.php?category=$1 [QSA,L,NC]

RewriteRule ^adm/?$ index.php?page=admin [QSA,L,NC]

RewriteRule ^(.*)$ index.php?/$1 [L,QSA]

不幸的是如果我打开apache.err.log看不到与RewriteEngine有关的错误,所以我试图在我的.htaccess文件中使用LogLevel alert rewrite:trace6但是没有产生日志,也尝试过了将rewrite.log文件放在站点文件夹中,并获得777权限,不做任何更改,文件仍为空白。

编辑:由于此文件在另一台服务器(cloud9 IDE)中工作,而这里没有(AWS Ubuntu 14.04),我假设我错过了一些配置。如何启用LOG以查看发生了什么?

3 个答案:

答案 0 :(得分:0)

通过语法检查器

运行它

E.g。 http://www.htaccesscheck.com/

答案 1 :(得分:0)

由于相对重写目标,您可能会收到404错误状态,在您的traget路径之前添加斜杠,即:( /index.php

Options +FollowSymLinks

RewriteEngine On


RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^article/([\w-]+)/?$ /index.php?article=$1 [QSA,L,NC]

答案 2 :(得分:0)

andreaem,试试这个:

RewriteEngine On


RewriteRule ^article/([a-zA-Z-_]+)+$ index.php?article=$1 [L]

RewriteRule ^category/([a-zA-Z-_]+)+$ index.php?category=$1 [L]

RewriteRule ^adm$ index.php?page=admin [L]