繁体   English   中英

.htaccess 用空格重定向网址

[英].htaccess redirect urls with spaces

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

不幸的是,我不断收到 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 

但它抛出对象未找到 404 Apache 错误。

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

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

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

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

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

您的重写规则与您指定的网址不匹配。 您的 REQUEST_URI 是

/vacatures/jobapplication/facility-manager%20qsdf 

我怀疑在 RewriteRule 匹配之前没有完成 URL 解码,因此它试图匹配%20 ,但%符号未包含在您的匹配中。 我不确定你为什么使用两个RewriteRule s - 为什么不做这样的事情?

RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteCond %{REQUEST_URI} !^index.php(\?.*)?$
RewriteRule ^(.*)$ index.php?p=$1 [L]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM