我有一个像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/" />