【发布时间】:2017-09-20 23:15:57
【问题描述】:
我需要什么模式来重写请求的 URL 中的所有字符?我试过了:
RewriteRule ^([a-z\-_0-9]+)/([^/.]+)$ index.php?engine=$1&q=$2 [NC,L]
但是点 . 没有被识别。
【问题讨论】:
标签: regex .htaccess mod-rewrite url-rewriting
我需要什么模式来重写请求的 URL 中的所有字符?我试过了:
RewriteRule ^([a-z\-_0-9]+)/([^/.]+)$ index.php?engine=$1&q=$2 [NC,L]
但是点 . 没有被识别。
【问题讨论】:
标签: regex .htaccess mod-rewrite url-rewriting
(.*) 将匹配所有字符。这就是你所需要的。
【讨论】:
要匹配所有内容,您可以使用:^(.+)/(.+)/?$(带有可选的斜杠)
如果您想坚持使用字符类的现有格式,这里会遇到一些问题。在字符集/类中,您应该始终将连字符放在末尾以获得有效的正则表达式。您还省略了大写字符。因此,要匹配您想要的基本字母数字、下划线和连字符:
[a-zA-Z0-9_-]
或者,使用字符转义:
[\w\d_-]
您的第二组括号目前专门排除句点和斜线,与所有其他人匹配。
如果您的应用程序数据定义明确,您可能希望使用已定义的字符类,并在所有其他数据上使用 404。如果您想要一揽子重定向,那么以下内容应该可以解决您的问题:
RewriteRule ^(.+)/(.+)/?$ index.php?engine=$1&q=$2 [NC,L]
【讨论】:
RewriteCond %{REQUEST_URI} !^/images/ 在 RewriteRule 行之前可能会对您有所帮助(假设您的图像都包含在 /images/
这是肯定的,因为图像甚至 favicon.ico 将被“重写”到您的 index.php,请尝试使用这些规则排除“静态”文件和目录。此代码将读取真实存在的任何内容,如果不是,它会将其重定向到您的 index.php 进行处理:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{HTTP_HOST} ^(^.*)\.mydomain.com$
RewriteRule . /index.php [L]
排除“某些”文件或目录的另一种方法是使用如下行:
RewriteCond %{REQUEST_URI} !^(/index\.php|/img|/js|/css|/robots\.txt|/favicon\.ico)
【讨论】: