Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 重写联机和本地子文件夹上的工作规则_.htaccess_Mod Rewrite - Fatal编程技术网

.htaccess 重写联机和本地子文件夹上的工作规则

.htaccess 重写联机和本地子文件夹上的工作规则,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我有一个问题,我相信这里有很多解决方案,但找不到要搜索的内容 我在一个网站上工作,有时我更喜欢在本地版本上工作。 假设: http://www.normal-website.com http://127.0.0.1/local-version/ 对于每个版本,我都有一个不同的规则来重写css/style.css到css/style.css.php(我的htaccess在根文件夹中): 我怎么能写只有一条规则,这样我就可以在线和本地拥有相同的htaccess?也可以使用任何目录(例如,如果我使用

我有一个问题,我相信这里有很多解决方案,但找不到要搜索的内容

我在一个网站上工作,有时我更喜欢在本地版本上工作。 假设:

http://www.normal-website.com
http://127.0.0.1/local-version/
对于每个版本,我都有一个不同的规则来重写
css/style.css
css/style.css.php
(我的htaccess在根文件夹中):

我怎么能写只有一条规则,这样我就可以在线和本地拥有相同的htaccess?也可以使用任何目录(例如,如果我使用另一个版本127.0.0.1/website2/的话)

非常感谢您的帮助,如果您能为我找到现有答案,请抱歉重新发布。

您可以使用:

RewriteEngine On

RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]

RewriteRule ^css/([a-z0-9/-]+)\.css$ %{ENV:BASE}css/$1.css.php [NC,L]

下面是另一个带有少量
if-then-else
逻辑的想法:

RewriteCond %{REQUEST_FILENAME} local-version
RewriteRule ^css/([a-z0-9-/]+).css$ local-version/css/$1.css.php [QSA,L]
RewriteRule ^css/([a-z0-9-/]+).css$ css/$1.css.php [QSA,L]
在两个htaccess文件上都尝试一下,如果有任何bug,请告诉我们

如果您有第二个网站,并且您的本地文件夹是local-web2,请在最后一行之前插入条件+规则对:

RewriteCond %{REQUEST_FILENAME} local-version
RewriteRule ^css/([a-z0-9-/]+).css$ local-version/css/$1.css.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} local-web2
RewriteRule ^css/([a-z0-9-/]+).css$ local-web2/css/$1.css.php [QSA,L]
RewriteRule ^css/([a-z0-9-/]+).css$ css/$1.css.php [QSA,L]

记住:一个条件(或多个条件),一条规则。因此,最后一行仅在其他条件失败时执行。所以,把它留到最后。

+1,这是一个让我学习的神奇的mod重写!我喜欢在“重写条件”中,您如何引用规则的组捕获,这些捕获将在规则的后面部分捕获。它真的很富有,还不了解它。:)老实说,我真的不明白它是怎么工作的。。。但是它工作得很好!非常感谢您的帮助,当您移动一个网站或使用基于相同.htaccess的多个网站时,它会非常有用。非常感谢:)谢谢@zx81,非常欢迎您。这是使用反向引用捕获当前
RewriteBase
值的正则表达式技巧。
RewriteCond %{REQUEST_FILENAME} local-version
RewriteRule ^css/([a-z0-9-/]+).css$ local-version/css/$1.css.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} local-web2
RewriteRule ^css/([a-z0-9-/]+).css$ local-web2/css/$1.css.php [QSA,L]
RewriteRule ^css/([a-z0-9-/]+).css$ css/$1.css.php [QSA,L]