删除URL文件扩展名但保留文件结构?

时间:2015-07-22 19:21:24

标签: php .htaccess mod-rewrite

我有一个像http://example.com/dev/testSite/这样的网址,其中testSite的根目录在dev目录中。我将该目录设置为:

testSite
-images/
--image.png
-css/
--style.css
header.php
footer.php
index.php
page.php

我也加入了我的.htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

第一个问题是,而不是像http://example.com/dev/testSite/page/那样转到page.php,而是重定向到http://example.com/page/。最终这个网站将在http://testSite.com生效,所以我假设这个代码能够正常运行。与此同时,我是否可以做任何快速使其在开发环境中工作?在将其移至生产环境时,我可以迅速改变的东西。

第二个问题是这也改变了文件的文件结构。例如,像<img src="images/image.png">这样的page.php上的任何代码实际上都是在http://example.com/dev/testSite/page/images/image.png中尝试查找此图像。我想这个.htaccess使它表现得好像我添加了目录“page”而不是隐藏扩展名。

网站上没有任何框架或任何内容,所以只需要常规的php页面。

1 个答案:

答案 0 :(得分:1)

你的.htaccess在/dev/子目录中应该是这样的:

RewriteEngine On
RewriteBase /dev/

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

RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ $1/ [R=301,L]

RewriteRule ^([^/]+)/$ $1.php [L]

RewriteRule ^([^/]+)/([^/]+)/$ $1/$2.php [L]

然后要修复css / js中的相对路径,可以在页面的HTML的<head>部分添加:

<base href="/dev/testSite/" />