使用WAMP进行一些本地PHP开发。将所有请求路由到index.php,除之外的资产请求,例如样式表和图像,这些资源位于文档根目录之外的父目录中。目录如下:
C:\WAMP\www\
↳ mySite
↳ public
↳ .htaccess
↳ index.php
↳ assets
↳ style
↳ desktop.css
的.htaccess
RewriteEngine on
RewriteBase /mySite/
RewriteCond %{REQUEST_URI} \.css$ [NC]
RewriteRule ^(.*)$ assets/$1 [L]
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^(.+)\/?$ index.php?url=$1 [L,QSA]
mySite.conf
Alias /mySite/ "C:/WAMP/www/mySite/public/"
<Directory "C:/WAMP/www/mySite/public/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
Allow from all
</Directory>
结果
localhost/mySite/
- 按预期返回index.php
localhost/mySite/style/desktop.css
返回内部服务器错误
我错过了什么?
由于
答案 0 :(得分:1)
这可能是由于循环。
尝试使用此代码来解决此问题:
RewriteEngine on
RewriteBase /mySite/
RewriteRule ^((?!assets/).+?\.css)$ assets/$1 [L,NC]
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^(.+)\/?$ index.php?url=$1 [L,QSA]
答案 1 :(得分:0)
正如Anubhava在另一个问题中回答的那样:
只是为了澄清任何网站都无法访问其DOCUMENT_ROOT文件夹级别以上的文件。
所以我应该将文档根目录设置为mySite/
并将所有请求路由到public/
以实现我通过公开文档根目标所实现的相同安全性。
现在assets/
位于文档根目录中,我可以按照OP中的需要将资产请求重写到此目录。