Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
htaccess重写(删除php扩展)_Php_Apache_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

htaccess重写(删除php扩展)

htaccess重写(删除php扩展),php,apache,.htaccess,mod-rewrite,url-rewriting,Php,Apache,.htaccess,Mod Rewrite,Url Rewriting,今天我的.htaccess文件有问题。在我的服务器上,我有几个文件夹,每个文件夹分别位于以下网站示例中: 服务器结构全局文件夹 - my_portfolio - website_two - my_website - example 在示例文件夹中,我有一个.htaccess文件: Options +FollowSymLinks -MultiViews RewriteEngine On RewriteBase / RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(

今天我的.htaccess文件有问题。在我的服务器上,我有几个文件夹,每个文件夹分别位于以下网站示例中:

服务器结构全局文件夹

- my_portfolio
- website_two
- my_website
- example
在示例文件夹中,我有一个.htaccess文件:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /$1.php [L]

#To remove www header
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
当我打开我的网址时,重写规则运行良好,没有www,并且.php扩展是不可见的,但是当我单击菜单中指向其他网站的链接时,我得到如下结果: www.example.com/example/contact

我的网站地址是www.example.com,该网站的所有内容都在服务器上的example文件夹中。我不知道我写错了什么地方。当我试图转到另一个webside重写引擎时,总是给我一个不带.php扩展名的链接,但在链接之前添加到文件夹名

这是一个很好的例子:

www.example.com/contact.php - normal link without htaccess
example.com/example(folder name where is a website)/contact - now
example.com/contact - should be

重新排列规则并将重定向规则放在内部路由规则之前:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

#To remove www header
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301,NE]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NE]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

另外,在新浏览器上测试此功能,以避免旧的301缓存。

你好,anubhava,谢谢你的answear,但效果是一样的,我在新浏览器上检查此功能,为此我下载了firefox,仍然文件夹名称在链接中已过时我不知道为什么在VirtualHost设置中/example/未设置为DocumentRoot?我从提供程序获得了主机这不是我的本地主机或服务器。我的目录在服务器上看起来是:/public\u html/webisteone/index.php我没有访问VirtualHost设置的权限,我唯一能做的就是在htaccess中编写正确的代码,并将此文件放入websiteone目录。我在上面写的htaccess中的所有设置。