我已将Usbserver设置为我的PC上的本地网络服务器,因此服务器根目录为http://localhost:8081/,但我的所有webproject都位于本地服务器的http://localhost:8081/WWW/PHP/子目录中。
现在:一切正常 - 所有相对路径都可以正常工作,但是当我使用.htaccess文件时,我想设置我的自定义404.php页面,其相对路径如下:
ErrorDocument 404 /php/errors/404.php
...它只是没有按预期工作因为它当然指向http://localhost:8081/而不是,比如说,http://localhost:8081/WWW/PHP/myproject/这是我实际代理的服务器根类(cos一次上传到远程服务器它将成为http://myproject.com/)。
这在远程服务器上绝对没问题,但在本地服务器结构上没有。我也尝试了一个这样的建议:
ErrorDocument 404 ./php/errors/404.php
...但最终显示空白页面,显示句子“./php/errors/404.php”。
问题:如何在“普遍”中编写.htaccess中的代码,因此认为根服务器位于“myproject”目录而不是“http://localhost:8081/”但是一旦上传到我的远程服务器,让我们说http://myproject.com/它仍能正常工作吗?
记住:我无法在Usbserver设置中使用重写本地服务器的根目录,因为我在“http://localhost:8081/WWW/PHP”中也有其他网页量,所以他们都会停止工作!
我想有一些RegEx代码可以解决这个问题(正如我在Stackoverflow上看到很多次这样做的那种东西)但我自己在RegEx中非常糟糕,所以没有其他人的帮助我是“丢失”。
我在搜索之前已经搜索了网页:有很多解决方案,但我没有找到任何可以解决这个特定任务的问题(大多数建议只是在我的虚拟服务器中重写服务器root - Usbserver - 我不能做的设置由于上面解释的原因)。
我只是需要它在localhost和远程服务器上正常工作,而不是每次我将我的网站上传到远程服务器时重写我的.htaccess代码,反之亦然。
P.S。:我也注意到当我为我的本地服务器设置我的自定义404.php页面时使用absolutle路径,如:
ErrorDocument 404 http://localhost:8081/WWW/_PHP_/myproject/php/errors/404.php
...它有效但是它改变了自定义404页面的URL而不是保留原来的“不存在的”URL地址 - 为什么?使用正常的未编辑404页面的网址,URL会发生变化,它会保持不变(=不存在的链接)。
编辑 - 最终解决方案: 因此,经过几个小时的播放,浏览网页,搜索任何一些额外的有用信息,我终于让它完全按照我想要的方式工作 - 在localhost和远程服务器的情况下指定错误页面(404等)的不同目录,这里是(请注意:这是我自己的代码所以它可能看起来不太好 - 我是.htaccess东西的新手 - 但至少它真的对我有用,因为我预期它会起作用):
# RULES FOR ERROR PAGES DIRECTORY IN CASE OF localhost:8081
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^localhost:8081 [NC]
RewriteRule .? /WWW/_PHP_/myproject/php/errors/404.php [L]
# RULES FOR ERROR PAGES DIRECTORY IN CASE OF remote server (actual webpage on public server)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !^localhost:8081 [NC]
RewriteRule .? /php/errors/404.php [L]
答案 0 :(得分:0)
错误文档指令中不允许使用相对路径。所以你可以使用绝对路径而不是完整的URL。
ErrorDocument 404 /www/_php_/myproject/php/errors/404.php
参考:
答案 1 :(得分:0)
这是可行的解决方案
git add