用于URL重写的正则表达式(如果不是“);。php“;在路上
我的老板想让我编写一个URL重写,比如说“”——也就是说,如果URL不包含“.php”或“.html”,那么它应该由类似“”的脚本处理。 用一个简单的正则表达式可以吗?我就是找不到合适的表达方式。 我一开始是将请求重定向到一些特殊的子目录,但现在它应该可以直接工作,而不需要任何进一步的子目录,所以我必须以某种方式将对现有页面的常规请求分离为不包含“.php”或“.html”的请求 有什么建议或链接给我吗 致以最良好的祝愿,用于URL重写的正则表达式(如果不是“);。php“;在路上,php,url-rewriting,Php,Url Rewriting,我的老板想让我编写一个URL重写,比如说“”——也就是说,如果URL不包含“.php”或“.html”,那么它应该由类似“”的脚本处理。 用一个简单的正则表达式可以吗?我就是找不到合适的表达方式。 我一开始是将请求重定向到一些特殊的子目录,但现在它应该可以直接工作,而不需要任何进一步的子目录,所以我必须以某种方式将对现有页面的常规请求分离为不包含“.php”或“.html”的请求 有什么建议或链接给我吗 致以最良好的祝愿, 罗马人 为什么不使用mod rewrite 链接以解释: 像这样的东西应
罗马人 为什么不使用mod rewrite 链接以解释:
像这样的东西应该可以奏效
RewriteEngine on
RewriteCond %{REQUEST_URI} !\.php
RewriteCond %{REQUEST_URI} !\.html
RewriteRule (.*) /process.php?string=$1 [QSA]
关于这是放在.htaccess中还是直接放在VirtualHost定义中(放在或不放在前导/),有一些警告
此外,您应该加载mod_rewrite
所有这些假设都是假设您实际上正在使用Apache,并且可以使用mod_rewrite
这样做的目的是,如果请求的URI不包含strings.php和.html,那么它会在内部将请求重定向到process.php文件,并使用作为查询字符串参数编写的内容
如果您对此有问题,请使用
RewriteLog "/tmp/rewrite.log"
RewriteLogLevel 9
并检查它是如何工作的。要实现这一点,您必须控制服务器,因为它必须在主配置文件中使用(可能没有.htaccess)。至少在mod_rewrite中,您可以使用与.php和.html匹配的正则表达式,然后在前面加上!,这应该会否定它。使用mod_rewite,您可以这样重新编写.php和.html URL,如下所示:
RewriteEngine on
RewriteRule !\.(php|html)$ process.php/$1 [NC] [QSA]
但是,您可能还希望阻止它将URL重新写入实际存在的文件。(可能还有其他文件-图像/css等,您不想重新写入)您可以修改上述内容以添加检查:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(php|html)$ process.php/$1 [NC] [QSA]
添加此检查可能意味着您实际上不需要检查扩展名是否不是.php或.html,因为您知道只有在请求的文件不存在的情况下才会重写扩展名,因此您可以将重写规则行修改为:
RewriteRule ^(.*)$ process.php/$1 [NC] [QSA]
这意味着任何请求的URL如果不作为文件存在,都将由process.php处理。非常感谢您,也向所有回答我问题的人表示热烈的拥抱!这个解决方案很到位,我很高兴现在不用读奥莱利的RegEx圣经了。它工作得很好!