RewriteEngine On
# If directory, redirect to root
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ / [R,L]
# Don't show something.json
#RewriteCond %{REQUEST_FILENAME} -f
RewriteRule something\.json$ / [R,L]
# If not file or directory, go to the router
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /subfolder/router.php [L]
# Any other existing files get served normally
我们可以忽略前两个规则,它们起作用。问题出在第三部分/规则中。
htaccess文件在这里:
https://subdomain.sitename.com/subfolder/.htaccess
我需要任何非目录和非文件地址才能访问/subfolder/router.php
。
我在服务器上有一个html文件:
https://subdomain.sitename.com/subfolder/sub2/filename.html
我想要网址:
https://subdomain.sitename.com/subfolder/sub2/filename
映射到/subfolder/router.php
,因为服务器上不存在filename
(仅存在filename.html
)。
但是它提供/显示filename.html
文件/页面,而不是映射到/subfolder/router.php
。地址栏仍然仅显示filename
,而没有显示.html
。
它在我的本地主机上工作正常,但在我将文件上传到的在线服务器上却无法正常工作。我无权访问服务器的配置文件。
我已经在线阅读了,看起来好像在虚拟主机上?
我尝试过:
Options -MultiViews
(给出错误)AcceptPathInfo off
(无济于事)RewriteCond %{REQUEST_FILENAME}.html -f
(不)有什么方法可以强制RewriteCond %{REQUEST_FILENAME} !-f
不匹配服务器上文件的扩展名(如果它们不在URL中)?
还是至少可以通过某种方式解决问题?
经过数小时的尝试和在线阅读,我现在正在失去理智。任何帮助将不胜感激。
答案 0 :(得分:0)
好的,经过一番思考和尝试之后,我通过更改来解决了这个问题:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /subfolder/router.php [L]
到
RewriteRule \.html$ /subfolder/router.php [L]
我并不完全满意,但它现在可以正常工作,因为router.php文件检查文件是否存在并使用文件白名单。