某些人留下了错误的网站链接类型,例如:
name sent received
John 4 3
Jim 5 2
Luis 3 1
正确的链接必须是:
https://example.com/subdir/3.php/3.php
请告诉我URL中有两个“ page.php”时如何使用https://example.com/subdir/3.php
,以及如何将其重定向到正确的页面?
答案 0 :(得分:0)
有趣的问题...
要删除看起来像.php
文件的URL路径上的最后一个重复路径段,则可以使用mod_rewrite在.htaccess
中执行以下操作:
RewriteEngine On
# Remove last repeating path segment that "looks like" a PHP file
RewriteRule ^(.+/)?([\w-]+\.php)/\2$ /$1$2 [R=302,L]
这不检查URL是否映射到实际文件,仅检查它是否“看起来像” .php
文件。
说明:
(.+/)?
-匹配任何路径深度,并且是可选的,因此我们可以匹配文档根目录中的文件。这是在$1
反向引用中捕获的。([\w-]+\.php)
-匹配.php
文件名。文件名可以包含字符a-z
,A-Z
,0-9
,_
和/或-
。这是在$2
反向引用中捕获的。/\2
-与斜杠匹配,后跟重复的文件名,如上所示。 \2
是对第二个捕获组的内部反向引用。然后,我们重定向到/$1$2
-将URL路径和文件名连接在一起,在初始请求的末尾省略“重复的”文件名。
以上内容将重定向以下所有内容(例如):
/subdir/3.php/3.php
至/subdir/3.php
/index.php/index.php
至/index.php
/foo/bar/baz/test-123.php/test-123.php
至/foo/bar/baz/test-123.php
/subdir/3.php/3.php/3.php
至/subdir/3.php/3.php
至/subdir/3.php
(多次重定向)更新:
但是/之后的随机字母和数字呢?例如-/subdir/3.php/blala。
对于更通用的版本,它去除了网址中.php/
之后的所有内容,您可以改为执行以下操作:
# Strip everything after what looks like a PHP file
RewriteRule ^(.+?\.php)/ /$1 [R=302,L]
请注意,这些当前是302(临时)重定向。如果您打算这样做,则可能要考虑将它们更改为301(永久),一旦确认它们可以正常工作即可。
如果要链接到实际的.php
文件,则有效文件之后的所有内容都称为附加路径名信息或路径信息(可在PATH_INFO
服务器中使用变量)。 URL上的path-info是否完全有效(默认情况下)取决于Apache处理程序(在这种情况下为PHP处理程序)。像/subdir/foo.html/bar
这样的URL(其中foo.html
是有效文件)实际上会产生404(与PHP文件的处理方式相反)。您还可以通过在Apache配置或.htaccess
文件中设置以下内容来禁用PHP文件的路径信息:
AcceptPathInfo Off
这将导致任何包含触发系统生成的404的路径信息的URL。通常,这是这种情况的更常见处理方式。