Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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
用于URL重写的正则表达式(如果不是“);。php“;在路上_Php_Url Rewriting - Fatal编程技术网

用于URL重写的正则表达式(如果不是“);。php“;在路上

用于URL重写的正则表达式(如果不是“);。php“;在路上,php,url-rewriting,Php,Url Rewriting,我的老板想让我编写一个URL重写,比如说“”——也就是说,如果URL不包含“.php”或“.html”,那么它应该由类似“”的脚本处理。 用一个简单的正则表达式可以吗?我就是找不到合适的表达方式。 我一开始是将请求重定向到一些特殊的子目录,但现在它应该可以直接工作,而不需要任何进一步的子目录,所以我必须以某种方式将对现有页面的常规请求分离为不包含“.php”或“.html”的请求 有什么建议或链接给我吗 致以最良好的祝愿, 罗马人 为什么不使用mod rewrite 链接以解释: 像这样的东西应

我的老板想让我编写一个URL重写,比如说“”——也就是说,如果URL不包含“.php”或“.html”,那么它应该由类似“”的脚本处理。 用一个简单的正则表达式可以吗?我就是找不到合适的表达方式。 我一开始是将请求重定向到一些特殊的子目录,但现在它应该可以直接工作,而不需要任何进一步的子目录,所以我必须以某种方式将对现有页面的常规请求分离为不包含“.php”或“.html”的请求

有什么建议或链接给我吗

致以最良好的祝愿,
罗马人

为什么不使用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圣经了。它工作得很好!