3

我正在尝试让我的 .htaccess 文件正常工作。但它似乎有几个问题:

RewriteEngine on
RewriteRule ^css/ - [L]
RewriteRule ^img/ - [L]
RewriteRule ^js/ - [L]

RewriteCond %{HTTP_HOST} ^www\.example\.ch$ [NC]
RewriteRule ^(.*)$ http://example.ch/$1 [R=301,L]

RewriteRule ^(dir1/dir2)([a-zA-Z0-9\/\-\_,]+)$ index.php?page=$1&id=$2 [L]
RewriteRule ^(dir1/dir2)([a-zA-Z0-9\/\-\_,]+)$ index.php?page=$1&id=$2 [L]
RewriteRule ^(dir1)([a-zA-Z0-9\/\-\_,]+)$ index.php?page=$1&id=$2 [L]
RewriteRule ^([a-zA-Z0-9\/\-\_,]+)$ index.php?page=$1 [L]

1)在我的 .htaccess 中,点不起作用。当我这样写最后一条规则时:

RewriteRule ^(.*)$ index.php?page=$1 [L]

我只是得到“主页”。如果我 var_dump($_GET) 有键'page',它应该是,但它的值是'index.php'。怎么没写地址?

2) 本网站有一个旧版本,其 URL 为 www.example.ch/page.php。我想将旧的 .php 网站重定向到新网站,因此点击 google 中旧链接的访问者不会收到 404 错误。当我输入 example.ch/page.php 时,使用上面的 .htaccess 我被重定向到类似的东西:

 http://example.ch/home/httpd/vhosts/example.ch/httpdocs/page

这是什么原因?

谢谢

4

1 回答 1

2

问题 1

这是一个简单的修复...这是因为您的.htaccess文件正在重写重写的 url。为了显示:

http://mysite.com/this/content                     <---Original URL
http://mysite.com/index.php?key1=this&key2=content <---First rewrite
http://mysite.com/index.php?key1=index.php         <---Second rewrite/final url

要解决此问题,您只需添加一个重写条件以在文件存在时不重写,例如:

ReWriteCond %{REQUEST_FILENAME} !-f

编辑

只是为了完整性......原因

RewriteRule ^([a-zA-Z0-9\/\-\_,]+)$ index.php?page=$1 [L]

作品和

RewriteRule ^(.*)$ index.php?page=$1 [L]

不是因为.*包含字符?以及=您的模式不包含的位置(?=来自 GET 字符串)。

问题2

要转换http://site.com/file.phphttp://site.com/file `,您可以使用以下重写规则:

ReWriteCond %{REQUEST_FILENAME} !-f
ReWriteRule ^(.*).php$ $1
于 2013-10-12T21:32:04.083 回答