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


Remove URL file extension but retain file structure?

我有一个像http://example.com/dev/testSite/这样的URL,其中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上运行,所以我假设这段代码将正常工作。与此同时,我能做什么快速使它在开发环境中工作?我可以在将其移动到生产环境时快速更改。

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

网站上没有框架之类的东西所以只有普通的php页面

你的。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/" />