Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
Apache 在Mod_Rewrite中使用多个友好url_Apache_.htaccess_Url_Mod Rewrite - Fatal编程技术网

Apache 在Mod_Rewrite中使用多个友好url

Apache 在Mod_Rewrite中使用多个友好url,apache,.htaccess,url,mod-rewrite,Apache,.htaccess,Url,Mod Rewrite,我能够使用此代码使URL正常工作 RewriteRule ^(.*)/([^/\.]+)/?$ $1/index.shtml?dynContent=$2 [L] 所以dynContent=苹果或香蕉或香蕉苹果 因此,如果我键入或/dir1/bananas或/dir1/bananas apples,它将使用正确的内容显示在index.shtml中 然而,我有一个页面需要使用整版,我有一个页面配置为整版,它被命名为indexFP.shtml dynContent=这一页的橙色 我的规则是 Rewr

我能够使用此代码使URL正常工作

RewriteRule ^(.*)/([^/\.]+)/?$ $1/index.shtml?dynContent=$2 [L]
所以dynContent=苹果或香蕉或香蕉苹果

因此,如果我键入或/dir1/bananas或/dir1/bananas apples,它将使用正确的内容显示在index.shtml中

然而,我有一个页面需要使用整版,我有一个页面配置为整版,它被命名为indexFP.shtml

dynContent=这一页的橙色

我的规则是

RewriteRule ^(.*)/([^/\.]+)/?$ $1/indexFP.shtml?dynContent=$2 [L]
但这并不能为这一页调出正确的整页

当我输入时,它使用index.shtml而不是indexFP.shtml

有办法做到这一点吗?这是我现在拥有的

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/([^/\.]+)/?$ $1/index.shtml?dynContent=$2 [L]
RewriteRule ^(.*)/([^/\.]+)/?$ $1/indexFP.shtml?dynContent=$2 [L]
有什么建议吗?

[L]
在mod_rewrite中表示“最后一次”。这将停止处理,因此上面的
indexFP
规则永远不会被命中

我认为您正在尝试的是为一些字符串选择
index
,为其他字符串选择
indexFP
。要做到这一点,你需要一种方法来选择一条规则。我的重写赋有点生疏,但有点像:

# match "oranges"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /oranges/
RewriteRule ^(.*)/([^/\.]+)/?$ $1/indexFP.shtml?dynContent=$2 [L]

# match everything else
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/([^/\.]+)/?$ $1/index.shtml?dynContent=$2 [L]

哇…真管用!有没有办法让它更具活力?我只是在想这是专为橘子做的……假设是苹果?只是想找出一种方法,它可以做到这一点,而不必在这里输入每一个,也不必每次都重新启动apache。我想我能够从您的示例中找到它匹配“oranges”重写条件%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}-已重写cond%{REQUEST_URI}/(*)FP/?重写规则^(.*)/([^/\.]+)/?$$1/indexFP.shtml?dynContent=$2[L]#匹配所有其他内容重写条件%{REQUEST\u FILENAME}-f RewriteCond%{REQUEST_FILENAME}-重写规则^(.*)/([^/\.]+)/?$$1/index.shtml?dynContent=$2[L]用于动态查找,请使用重写映射。当文件被修改时,它会自动重新加载映射文件,因此您不必重新加载Apache。RewriteMap还允许您使用单个规则集,而不是上面的“if-else”构造。您有好的参考资料吗?或者您可以推荐一个好的教程?主要的Apache文档非常好地描述了这些指令。有一个链接指向他们所谓的“详细”文档,其中包括大量的用例和示例。请参阅:编辑:我还发现,打开“重写调试日志”对于查看重写的各个阶段以及验证规则是否正在运行非常有帮助。调试日志在高层非常详细,因此只能在测试中使用。我想我用了5级,但是YMMV。