我阅读了一些有关mod重写的教程,但我找不到我要找的内容。我想要的所有URI只需要一个RewriteRule:
所以我的问题是,如何实现这一目标?
答案 0 :(得分:2)
您需要单独的规则来执行此操作。第一个规则将依赖于mod_rewrite循环,直到没有破折号,第二个规则将检查是否没有破折号并且它不是现有文件然后将php附加到结尾:
# Replace - with _
RewriteRule ^(.*)-(.*)$ /$1_$2
# When there are no more -, check if the file exists
RewriteCond %{REQUEST_URI} !-
RewriteCond %{REQUEST_URI} !\.php$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ %{REQUEST_URI}.php [L]
这两条规则将采用这样的网址:
并将URI重写为:
/asd_fgh_jkl_/qwe_rty_uio.php
答案 1 :(得分:0)
如果您要重写的内容中有多个“ - ”,则可能会出现问题。要解决此问题,请使用执行外部“过滤器”的RewriteMap指令。见here。 从网站上,重点关注您的外观:
MapType:prg,MapSource:Unix文件系统到有效常规文件的路径 这里的源是程序,而不是映射文件。要创建,您可以使用您选择的语言,但结果必须是可执行程序(对象代码或带有魔术cookie技巧的脚本'#!/ path / to / interpreter '作为第一行。)
该程序在Apache服务器启动时启动一次,然后通过其stdin和stdout文件句柄与重写引擎通信。
所以我的建议是:在python中创建一个非常简单的程序来执行搜索/替换并使用RewriteMap指令调用它,然后将php添加到它。