Php .htaccess中的点不工作,并重定向到服务器路径

Php .htaccess中的点不工作,并重定向到服务器路径,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我正在尝试使.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-

我正在尝试使.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
原因是什么

谢谢

问题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
编辑 只是为了完整。。。原因是什么

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

RewriteRule ^(.*)$ index.php?page=$1 [L]
不是因为
*
包含字符
=
,而模式不包含这些字符(来自GET字符串的
=

问题2 转换
http://site.com/file.php
to`您可以使用以下重写规则:

ReWriteCond %{REQUEST_FILENAME} !-f
ReWriteRule ^(.*).php$ $1

该网站的旧版本有类似“www.example.ch/page1.php”、“www.example.ch/page2.php”的URL。新版本的URL类似于“www.example.ch/page1”。通过上面的更改,圆点现在可以工作了。但是,当我调用一个类似于“www.example.ch/page1.php”的页面时,它会将URL重写为类似的内容。我需要解决的问题很简单:在Google中,有像“www.example.ch/page1.php”这样的旧页面。我希望他们被重定向到新页面。很抱歉再次检查此。。但是,您真的只是想删除
.php
扩展名吗?.php扩展名被删除了。我的问题是,当我键入像www.example.ch/page1.php这样的页面时,浏览器会将我重定向到URL example.ch/home/httpd/vhosts/example.ch/httpdocs/example,而不是URL www.example.ch/page1。这条路径是从哪里来的?好的,那么在这种情况下,您使用什么重写规则来实现这一点呢?听起来你在某种程度上使用了
%{REQUEST\u FILENAME}
?。。。我假设
.php
文件不再存在(因此404s)?如果是这样的话,我在答案中添加了一个重写规则,它将
.php
重定向到非
.php
ReWriteCond %{REQUEST_FILENAME} !-f
ReWriteRule ^(.*).php$ $1