首页 > 解决方案 > .htaccess 带有空格的重定向网址

问题描述

我正在尝试index.php通过我的 .htaccess 文件将所有无效的 url 重定向到我的文件。

不幸的是,我不断收到 Apache 错误。

我的 .htaccess 文件

RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteRule ^([a-zA-Z0-9\-\_\/]*)$ index.php?p=$1
RewriteRule ^([A-Za-z0-9\s]+)$ index.php?p=$1 [L] 

这个无效的 url 应该重定向到 index.php:

/vacatures/jobapplication/facility-manager%20qsdf 

但它会抛出 object not found 404 Apache 错误。

标签: phpapache

解决方案


您拥有的允许空格的规则不允许使用连字符。您拥有的允许连字符的规则不允许使用空格。因此,包含两者的任何内容都不会匹配。

您的无效 URLfacility-manager%20qsdf包括两者。

我的猜测是您RewriteCond应该适用于这两个规则,但这不是现在发生的事情,它只会适用于RewriteRule它之后的第一个。RewriteRule您可以通过仅包含 1并修改它以接受您想要的所有内容来解决所有这些问题:

RewriteRule "^([A-Za-z0-9\-\_\/\s]+)$" index.php?p=$1 [L] 

请注意,这需要您的字符类中的至少一个字符,换句话说,当没有路径时(“ http://somewhere.com/ ”),它将与您的“家”位置不匹配。如果您还想匹配该位置,请将 更改+为 a*以允许 0 个或多个字符匹配。


推荐阅读